1 :
デフォルトの名無しさん :
02/08/06 05:46
早朝からお疲れ様です
前スレの
>>988 > やるなら、
> if (CharPrev(lpszPath, lpszPath+lstrlen(lpszPath)-1) != '\\')
> lstrcat(lpszPath, TEXT("\\"));
> とかだろ。
これは
if(lstrcmp(CharPrev(lpszPath, lpszPath+lstrlen(lpszPath)-1), TEXT("\\")))
lstrcat(lpszPath, TEXT("\\"));
ってことかな?
これも「も\\」になるのだけど。
秘密のAPI!? そんなのがあったのかー。MSならやりそうなこった。 だんだんWindowsで作るのが馬鹿らしくなるな・・・
> これは > if(lstrcmp(CharPrev(lpszPath, lpszPath+lstrlen(lpszPath)-1), TEXT("\\"))) > lstrcat(lpszPath, TEXT("\\")); > ってことかな? if( *CharPrev(lpszPath, lpszPath+lstrlen(lpszPath)) != TEXT('\\') ) lstrcat(lpszPath, TEXT("\\")); ってことではなかろうか。
lstrlen使うなら、頭からCharNext適用していったほうがよくねーか?
ここ読むまで API = システムコールだと思ってたから、 ただのライブラリだと知って愕然とした記憶が有るよ。 ファイル列挙するのに FindFileFirst&Next 使えって一体。 Open&ReadDirectory みたいな関数でさっくりと ディレクトリハンドル開かせろ、読ませろ、とか思ってしまう。
前スレつまんない埋め立て方だな・・・
前スレの
>>992 仮に OleLoadPicturePath() 関数を使って画像を展開したとしても
少なくとも GIF に関しては特許料を支払う必要がある(とユニシス社は主張している)
JPEG に付いては知らん
>>10 スレ違いになるけど #include <dirent.h> でどうよ
>>12 たしかに「GIF恐いからGIFだけ排除した」とか書いてる人見ますね。
でも、OleLoadPicturePathが勝手にGIF読んでるだけだから
折れは知らんと言うのはダメなのかな?
折れはJPEGを読みたいだけだ。文句はMSにすれ。なんて。
−−>訴えられたら負けデスか?
>>14 少なくともMSも味方はしてくれんと思うけど。
http://www.microsoft.com/DEVONLY/Unisys.htm > Although Microsoft is licensed under these patents, Microsoft's
> license does not extend to software developers or third parties
> who use Microsoft toolkit, language, development or operating
> system products to provide GIF read/write ...
# 誰か裁判に持ち込んではっきりした判例を作ってくれないかなぁ。
>>14 これをコピーしてるのはコピー機なんだから著作権料はゼロックス社に請求しろ
と言ってるようなもんだ
少なくともユニシス社的には
17 :
JPEG特許問題 :02/08/06 14:14
>>15 英語じゃよく分かりませんが、確かにMSは味方してくれそうにないですね。w
MS独自開発の画像フォーマットでも作ってもらいましょうか。
WMFは却下。
>>16 いやいや、折れはゼロックスのコピー機を売ってる立場であり、
客が紙幣をコピーしようがこっちの知ったこっちゃ無いって立場の
つもりです。
折れ自身は、JPEGの表示がしたいだけなのだから、マニュアルにJPEG以外は
表示させないで下さいとでも書いておけば、完璧だと思ふ。
いろんな意見モトム。
ちょっと板ずれかも。
18 :
デフォルトの名無しさん :02/08/06 14:35
コンソールアプリをShellExecuteExで起動させているの。 そやつを終わらせたい場合ってTerminateProcessしかない?
19 :
デフォルトの名無しさん :02/08/06 14:52
「アプリケーションの追加と削除」の「現在インストールされているプログラム」のリストをWindows2000+VC6で、 APIで取得するにはどうしたらいいでしょうか?名前やインストールフォルダ、日付などを取得したいのですが。。。 MSDNを眺めてみて、あてずっぽうでMsiEnumProducts→MsiGetProductInfoとやってみたら、 何故か一部のリストしか取得できませんでした。なんでこんな中途半端な結果が???
>>17 マニュアルにJPEG以外は表示させないで下さいとでも書いておけば
GIFの場合はユニシスが「その手はダメだよ」と言っていたような覚えがあるけど
ソースが出てこない・・・誰か覚えている人ソースキボンヌ。勘違いだったらゴメンネ
22 :
デフォルトの名無しさん :02/08/06 16:29
>>8 それで「も」も「表」も上手くいきました。
これで大丈夫・・・ですよね?他に落とし穴は無いかなぁ・・
23 :
JPEG特許問題 :02/08/06 16:31
>>21 これ見る限りでは全然問題無さそうですね。
たしかに、OleLoadPicture関連はMSが特許料を払っているはず
とは思ってましたが、”消尽理論”てのは知りませんでした。
皆さんありがとうございました。
>>21 のリンク先より引用
IEコンポーネント自身の正規の機能であり、こうした動作も了解した上でMicrosoft
とUnisysはライセンスを結んでいるはず。もし制限があるのならば、Microsoft側が
きちんと明示しておくべきで、それがないのであれば問題ないと解釈すべき。
逆にいえばMicrosoftが明示している場合は制限されてもしょうがない、
ということだが、KBのQ193543では、
However, this license does not extend to third-party developers using
Microsoft development products to develop applications. Third-party
developers must have a license from Unisys in the form of a written
agreement.
と明示している。
25 :
JPEG特許問題 :02/08/06 17:19
な。逆に、特許料を払わねばならぬと明示されているのか・・?
>>17 だからユニシス社的にはって言ってるじゃん
いくら「コピー機を売ってる立場であり〜」などと主張しようが
ユニシス社的には特許権使用者に当たるから無意味
>>23 消尽理論の記事は「そういう理論が世の中に存在する」だけであって
だから特許料を払わなくても訴えられないということにはならんだろ
ユニシス社のある米国でなく日本の、弁護士でなく一弁理士の発言を
支持するのは一向に構わんが相応のリスクを負うことにはなる
>>22 素直に GetFullPathName() 使った方が良いんじゃない?
GIFが問題だったら、 数バイトだけチェックしてGIFだったら無視すれば。
28 :
JPEG特許問題 :02/08/06 18:23
>>26 殿
ラジャ サンクス
うーん。GIFって拡張子だけ排除しよ。
それ以上の努力が必要?
なら鬱。
JPEG特許問題でもっと鬱。
もはや板ずれ。スマソ 無意味じゃないけど。
>>19 それはインストーラに MSIを使ってるやつだけでしょう。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
の各キーの "DisplayName"と "UninstallString" を見てなんとかする
しかないんじゃないの?
>>18 コンソールが接続されてないとGenerateConsoleCtrlEventは
使えないんだっけ?
31 :
デフォルトの名無しさん :02/08/06 21:31
>>26 GetFullPathName()をどのように使うのですか?
これってカレントディレクトリをくっつけるんですよね?
著作権総合スレ立てておきましょうか?
>ファイル列挙するのに FindFileFirst&Next 使えって一体。 (;´Д`) ハゲシクドウイ。
36 :
デフォルトの名無しさん :02/08/07 06:40
ゲームで画面全体をゲーム画面にできるものがありますが、 あれはどうやれば実現できるのでしょうか? ChangeDisplaySettingsで画面の解像度を変更することはできたのですが、 クライアント領域が画面を覆うようにはなりませんでした。 MoveWindowを使っているのかとも思いましたが、それだとマウスカーソルを 画面上部に持っていってもメニューが表示されません。 どなたか教えてください。
37 :
JPEG特許問題 :02/08/07 09:00
GIFの判定にファイル拡張子を使用するのは糞だと思ったんで、 面倒でもヘッダを見て判定しようと思ったんですが、ファイルの先頭に "GIF"って書いてたらGIFファイルだと判定しても可ですか? "GIF"って書かれたテキストにも引っかかりますが、そんな鬱な テキストも滅却。
>>36 ChangeDisplaySettingsで一時的に画面の解像度を変えるのはご法度。
どんな解像度でも動くようにするか素直にDirectX使え。
一時的に変えるのがご法度ならCDS_FULLSCREENとか CDS_UPDATEREGISTRYとかわざわざフラグとして存在しないと思うのですが。 嘘ではないけど何か重要な説明をはしょったりしていませんか?
40 :
デフォルトの名無しさん :02/08/07 11:09
>>36 枠線なしにしてウインドウのサイズを画面と同じにして
一番上に表示
ではいけないの?
>>37 すべてデコードしてみて成功したらGIFファイルであるとみなす。
100%誤判定はないが判定した時点ですでに特許に抵触してるという罠
42 :
デフォルトの名無しさん :02/08/07 11:35
>>40 ウィンドウスタイルをWS_POPUPにして、
クライアント領域が画面全体を覆うように、ウィンドウの位置・サイズを
変更してみたのですが、そうするとメニューが使用できませんでした。
(メニューは画面外に位置)
ゲームではよく、普段メニューは表示されていなくても、
マウスカーソルを画面上部に持っていくと、メニューが現れますよね?
ああいう風にしてみたいと思ったのですが。
そのメニューってWindows標準のメニュー?
44 :
デフォルトの名無しさん :02/08/07 11:39
>>42 そりゃそのままじゃ使えないでしょ。
WM_MOUSEMOVEを捕まえて、ウインドウ上部(つまりこの場合は画面上部)
にきたらメニュー表示するようにすればいいのでは?
補足 ウインドウごと動かすと、ウインドウの中身も動いちゃうので、 メインウインドウはメニューなしにして、 メニューだけのウインドウを別に持つのがいいかも。
それって、非圧縮GIFが使えなくならね?
47 :
デフォルトの名無しさん :02/08/07 13:15
>>45 なるほど。ありがとうございます。
その方法で試してみます。
>>39 嘘だと思うなら、やってみれば。
確かに解像度は変えられるが、戻ったときに「うげ」となるから。
Win2k系ではChangeDisplaySettingsを使うと、 各ウィンドウの位置・サイズがおかしくなるみたいですね。 ちなみにうちの98SEの場合は問題ありません。
>>48 だからCDS_FULLSCREENがあるんだろ
環境次第だというならうちのWin2kではDirectX使っても
ウィンドウが勝手に移動しますが何か?
>>51 > うちのWin2kではDirectX使ってもウィンドウが勝手に移動しますが
後始末はしっかりやってる? 俺の環境でも、後始末のタイミング次第で
ウィンドウサイズが復元されない場合があった。
3D迷路のスクリーンセーバーってどうやって解像度切り替えてるの? Dependency Walkerで見る限りでは明らかにChangeDisplaySettings 使ってるのにWin2kでもウィンドウサイズおかしくなったりしないんだけど
どうしても自前のソート関数で並び替えをしたくて、 オーナー描画のコンボボックス(ドロップダウン)を作ったのですが、 リストから選択すると、テキストボックスに変な文字列が表示されます。 恐らくコンボボックスがテキストだと思ってアイテムデータのアドレスを テキストボックスに渡しているのだと思うのですが、 CBS_HASSTRING をつけると WM_COMPAREITEM 飛んでこないし、 何かいい方法はないでしょうか? というかそもそも作り方間違ってます?
内部でソートして、全部挿入しなおしたらええんとちゃう?
>>55 うーん、できればリアルタイムにソートしたいんですよね。
表示のたびに挿入し直しは無駄が多いような気がするので。
でも何となく雰囲気的に無理っぽい感じですね。
とりあえずソートしつつ挿入という方式でやろうと思いますが、
もしいい方法があったら引き続き情報お待ちしておりますので
よろしくお願いします。
あちしがListViewでやったときは、そんなに速度は変わらなかったけど? (ただし、挿入ではなく上書きを使ったけどネ)
58 :
デフォルトの名無しさん :02/08/08 20:40
質問。 かなりレベルの低い質問で恐縮なのですが ウインドウの背景を青にして そのウインドウにTEXTOUT関数で文字を出力すると 文字が白い四角の中に表示されてしまいます。 どうすれば青い背景の上に文字を表示できるでしょうか? よろしかったらお教えください。
>>58 SetBkMode( hDC, TRANSPARENT );
60 :
デフォルトの名無しさん :02/08/08 21:21
レスありがとうございます。 なるほど、TRANSPARENTっていう指定が 背景をそのまま残すっていう指定になるんですね。 参考になりました。ありがとうございました。
61 :
デフォルトの名無しさん :02/08/08 22:19
ListViewのエディット機能が非常に使いにくいのですが (エクスプローラで名前の変更で使うみたいな) エクセルみたいに軽快にEditを使いたいのですが どうすればいいんでしょうか?
62 :
デフォルトの名無しさん :02/08/09 06:49
SHPathFromIDList の逆で パスからIDListに変換するのに 使用するAPIって存在しますか? あるなら教えていただきたいのですが。 IDListについていまいちきちんと理解していないので、 見当外れなら指摘してもらえると助かります。 よろしくでお願いします。
63 :
デフォルトの名無しさん :02/08/09 10:29
起動している任意のアプリが、ダイアログかどうかを判断 するにはどうしたらよいのでしょうか?
「アプリがダイアログかどうか」ってどういう意味よ。
そのウインドウにWM_SIZEを送って大きさが変わるかどうか、ってのはどうだ?
>>64-65 表現が曖昧ですいません。
考え直してみたところ、判断したいのはダイアログではなくて
ウィンドウのサイズ変更ができないアプリであり、これはウィンドウスタイルに
WS_THICKFRAMEが含まれているかどうかを判定することにより解決しました。
67 :
デフォルトの名無しさん :02/08/09 18:00
クラスのメンバ関数をウィンドウプロシージャにする方法はないでしょうか? 単純に、 WNDCLASSEX wcex; wcex.lpfnWndProc = (WNDPROC)(this->WndProc); とするとコンパイルエラーになってしまいます。(型変換できないと言われる) (static関数にすればコンパイルできますが、thisを参照できないので 困ってしまいます)
>>67 SetProp()でウィンドウハンドルにthisを登録すれば何とか使えます
WM_CREATEの時点では使えませんけどね
>>68-69 これでうまくいきそうです。
紹介いただいたサイトもお気に入りに追加しました。
ありがとうございます。
71 :
デフォルトの名無しさん :02/08/09 22:08
OutputDebugString()の出力を表示するプログラムを作りたいんだけれど、 どこかにソース or 情報ありませんか。 (すれ立てるまでもない質問はここでに同じことを書きましたがスレ違い でした。すんまそ。)
72 :
ssssss :02/08/09 22:35
73 :
ssssss :02/08/09 22:36
>>71 デバッガを作りたいということ?
VC++使ってりゃデバッグウインドウにそのまま表示されるけど、それじゃだめなの?
>>73 その、表示が出るVC++のデバッグウィンドウの部分だけを
独立したソフトとして作りたいのです。
>>71 MFCのソースで見たことあるな。
EditWindowを作って、新たに表示させる文字列を
REPLACEなんとかで文章の最後に置き換える形で追加していく。
76 :
ssssss :02/08/09 22:55
77 :
ssssss :02/08/09 22:57
>76-77 ありがとうございます。 そろそろ終電だからその資料印刷して帰ろう。。。
今本棚を漁ったら、日経BPのwindowsプログラマのためのデバッグテクニックという本 にもヒントがありました。
80 :
ssssss :02/08/10 00:45
>>62 IShellFolder::ParseDisplayName()
>81 ありがとうございます。 早速試してみますね。
83 :
デフォルトの名無しさん :02/08/10 12:12
ツールバーをサブクラス化してもサブクラス化ルーチンにWM_COMMANDが飛んでこないのですが、そういうものなんでしょうか?
ツールバーの親
>>84 ボタンコントロールとかをサブクラス化した場合はサブクラス化ルーチンにWM_COMMANDが飛んでくるのにと思ってました。
激しく勘違い。何をサブクラス化してもWM_COMMANDは来ないのですね。
ところで、なんでサブクラス化ルーチンにWM_COMMANDが来ないのでしょう?
サブクラス化の意味が違う?
86 :
デフォルトの名無しさん :02/08/10 15:09
Win32APIってC言語で記述できるって聞いたけど、どうなの?
>>86 DLLを呼び出す為の仕掛けがC言語自体にはありませんから
その部分を別にリンクする事で可能になります。
世の中にはDelphiとか そういう機能を内在した言語もあります
したいから
>>88 複数のアプリで同一のツールバーを使う場合、ツールバーをDLL化して、ツールバーが押された時の処理もDLL側で行った方がすっきりして良いかと思いまして。
EXE側もツールバーの事を意識しない方が楽ですし。
91 :
ssssss :02/08/10 16:04
>>85 サブクラス化云々の問題よりも、
そもそもWM_COMMANDはボタンコントロール(のウインドウ)に送られるメッセージではなく、
ボタンが押された結果他のウインドウ(親ウインドウ)に送られるメッセージだからでしょ。
だから、ボタンにWM_COMMANDが送られるわけはない。
どういうツールバーよ
93 :
デフォルトの名無しさん :02/08/10 19:17
Windows2000のタスクマネージャのように、起動中のアプリケーションの タイトル名とアイコンを取得しようと思ったのですが、Delphiなどで 作られた一部のアプリケーションは二つのウィンドウが取得されてしまいます。 (例えばクラス名TApplicationとTFormMainの二つ) しかもこの二つのウィンドウのアイコンが別々です。 そこで、タスクマネージャのように一つだけ取得し、なおかつアプリケーションの 正しいアイコンを取得するにはどうすればよいのでしょうか。
>>91 サブクラス化って、サブクラス化したウィンドウに関する全てのメッセージを処理するものだと思ってたのです。
WM_COMMANDは仰る通り、考え方が違うのですね。
>>92 主にランチャー機能やタスク切換え機能ですね。
ヘルプ起動とかも行っていますが、これもランチャーに相当すると言えるかも。
あまり深く考えずに親ウィンドウ側でWM_COMMANDを処理してもいいんですが、各EXEに同じようなのを記述するのはいかがなものかと。
その部分だけ別ソースに書き出して工夫するのが良いのでしょうか?
>>95 ランチャーの機能に関する一連の関数、又はクラスをDLLの方に閉じ込めて
親ウィンドウのProcedureから呼べば?
そのためのREFLECT_NOTIFICATION()。 親から子にメッセージを投げ返せ。
>>95 =83
>サブクラス化って、サブクラス化したウィンドウに関する全てのメッセージを処理するものだと思ってたのです。
きみはウィンドウ関数(プロシージャ)というものちゃんとを知らないんだね。
>>93 GetWindow(hWnd,GW_OWNER) でゼロを返すほうが真のメインウィンドウ
>>71 dbmonのソース。
Platform SDKに入ってると思う
>>96 親で受け取ったWM_COMMANDがツールバーのものなのか判定するというのがいかがなものかと思いまして。
>>97 REFLECT_NOTIFICATIONで解決かと思ったのですが、使い方が分かりません。
しかしプラットフォームSDKの標準ヘッダーでは定義されていないですね。
MSDNを見ていたらATLマクロだということは分かりましたが、SDKなプログラムにREFLECT_NOTIFICATIONのみを実行させることは可能なのでしょうか?
>>98 はい。残念ながら知らないようです。
私の抱える問題を解消出来るような方法は御存じないでしょうか?
>>102 複数のEXEで同様な判定処理を行う事になるからです。
大した事ではありませんが、見た目上、同じツールバーを備えるEXEでも、EXE側での処理如何ではツールバーの動作が異なる可能性が出てくるためです。
今回、私の作っているツールバーでは、主にランチャー機能を持たせる訳ですから、EXE側にとってはツールバーの処理は無関係な訳です。
今のところ、ツールバーをサブクラス化したルーチンで、WM_LBUTTONUPの処理時にTB_ISBUTTONPRESSEDを使ってツールバーのどのボタンが押されたか調べる事が出来ましたので、他に良案が無ければこの方法でいこうかなと思います。
>>102 ちょっと書き方に不備がありましたね。すみません。
>複数のEXEで同様な判定処理を行う事になるからです。
つまり結局の所、[各EXEのWM_COMMANDでLOWORD(wparam)==ツールバーのボタンか?]の処理が必要になるのが如何なものか? ということです。
>>104 私個人としては、
「ウィンドウプロシージャに飛んで来るWM_COMMANDの振り分け」自体面倒な処理では無いと思うが..
case WM_COMMAND:
switch (LOWORD(wp)) {
case ID_TOOLBAR:
OnToolBarMsg(hWnd, msg, wp, lp);
break;
....
とかじゃダメなの?
WM_LBUTTONUPだとウィンドウ外でクリック->ホールド->ツールバーの上でリリース
でもイベントトリガーに...
>101 だから、REFLECT_NOTIFICATIONマクロと 実質的に等価なコードをかけや。
>>105 case WM_COMMAND:
switch (LOWORD(wp)) {
case ID_TOOLBAR:
この場合、LOWORD(wp)にはツールバーリソースIDではなくてボタンIDが入りますので、ボタンが複数あるとcase文を増やさねばなりません。
もちろん、面倒ではないですが。
>WM_LBUTTONUPだとウィンドウ外でクリック->ホールド->ツールバーの上でリリース
>でもイベントトリガーに...
ある意味、そのような操作をすると無駄なイベントは発生してしまいますが、TB_ISBUTTONPRESSEDを使ってツールバーのどのボタンが押されたか調べているので、実質的には問題は無いでしょう。
>>106 そのマクロと等価なコードがどんなものなのか分からないのです。
単にWM_COMMANDをツールバーに投げるだけですか?
>>103 DLLでツールバーとその親ウィンドウを作って、EXEには
親ウィンドウを張り付けりゃいいんでないの?
>>108 そういう手がありましたね。一番素直な組み方かも。
フローティングツールバーみたくする時も、この方が応用が効いて良さそうです。
ありがとうございます。
変な設計
変ですか?
普通親子が別ウィンドウになったりはしない
ごめん勘違い
114 :
CRect :02/08/13 00:22
あのー超初心者質問でスマンす。VC6 win32アプリ作成,標準で #include <windows.h> #include "StdAfx.h" だけだと CRect が”定義されてません”のエラーになるんですが, これは何をインクルードすれば使えるんでしょうか。 --------------------構成: a7 - Win32 Debug-------------------- コンパイル中... a7.cpp C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\MyProjects\a7\a7.cpp(24) : error C2065: 'CRect' : 定義されていない識別子です。
115 :
デフォルトの名無しさん :02/08/13 00:26
RECTじゃだめなの?
atltypes.hです MSDNに載ってるぞ
なんでWin32APIスレで(゜Д゚)
118 :
CRect :02/08/13 03:29
ですね。 それつかうんならSDKじゃないとやっと気付いた私。ごめ。
ところで stdafx.h って何やってるファイルなの? コンソールアプリ作る分には windows.h 読んどきゃ OK っぽいけど...
MSDN読んだ?
>>119 プリコンパイル済みヘッダファイル作成用だと思う
親のウインドウの中にCreateWindowで、 リストとエディットを作ったんだけど、その二つは横に並べるのね。 そんでお互いに接してる部分だけサイズ変更ってどうやるんでしょう? ↑エクスプローラのフォルダ表示エリアとファイル表示エリアみたいな関係にしたいのです。 フォルダ表示エリアの幅を広げると、ファイル表示エリアの幅が狭くなるって感じで。 CreateWindowのスタイルでWS_SIZEBOXとかやると、 4辺全部変えられるようになっちゃうし。 教えて下さいー。
>>122 IEのフレームみたいなのか?
あれはMFCではできるけどAPIだと自力でどうにかしろだったと思うが。
124 :
デフォルトの名無しさん :02/08/14 14:00
GetWindow(hWnd,GW_OWNER)で0を返すウィンドウのリスト(タスクマネージャのような。) を作り、それぞれのウィンドウのサイズやZオーダーを変更したり最小化・最大化しようとして それぞれのウィンドウへSendMessageしたのですが、最小化などはできるのですが サイズ変更やZオーダーは変更できないウィンドウがあります。 具体的にはDelphi製のソフトが該当するようなのですが、 Zオーダーなどの変更方法としてこの方法は間違っているのでしょうか? 間違っているのならどのような方法をとればよいのでしょうか?
Delphi製のソフトって、目に見えているウインドウが最上位のウインドウではなく、 その上にもう一つウインドウがある。
Delphi製アプリは不可視のトップレベルウィンドウとそれに所有される メインフォームという構造になってる たぶんその関係では?
不可視ウィンドウから可視ウィンドウ(メインフォームウィンドウ?)を 取得するにはどうすればよいのでしょうか?
内容がかぶったのでケコン→ケコン式はいつにしますかということだと・・・ 不可視ウィンドウとはクラス名TApplicationというやつぽいですが これ以外の同キャプションをメインフォームと判断するのは ちょっと乱暴なやり方でしょうか・・
131 :
デフォルトの名無しさん :02/08/14 14:42
別ユーザとして他のプロセスを起動したいんですが、LogonUser()でうまくいきません。 LogonUser( TEXT( "Administrator" ), TEXT( "." ), TEXT( "password" ), LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hToken ); こんな感じなんですが、どうですか?
>123 そうですねー。 IEのフレームみたいなやつ。 APIでは対応してないのですかー・・・ MFCってさっぱりわからんのであきらめますかな・・・ どーもでした。
上の132は122でした。 しつれーい。
>>132 左右のウィンドウの間にフレーム用のウィンドウを作る。
そのウィンドウがドラッグされたら左右のウィンドウのサイズを調整。
>>130 列挙して不可視ウィンドウがオーナーになってる奴を探す
>>131 起動元のユーザーはTCB特権を持っていますか?
137 :
デフォルトの名無しさん :02/08/14 18:04
>>136 TCB特権って何ですか?
調べてみたんですけど、それらしいものがでません。。。
>>13 これじゃないの? 手元の MSDN Library だと LogonUser() API の解説に
書いてあったんだが。
> LogonUser 関数を呼び出すプロセスは、SE_TCB_NAME 特権を備えて
> いなければなりません。
ついでにサポート技術情報から。
> 注意: ユーザー マネージャ [原則] - [ユーザーの権利] で、高度なユーザー権利の
> [オペレーティングシステムの一部として機能] をユーザーに許可することで
> 上記の権限をユーザーに持たせられます。
ちなみにむやみに特権を付加するのはセキュリティの問題があるからな。 SE_TCB_NAMEを付加するくらいだったら最初からAdministrators 与えとけよというくらい危険
>>139 話が逸れるんだが、Win32 の特権について詳解している書籍とかって知ってる?
MSDN Library にはパラパラとは書いてあるんだが、全体像を把握しかねてて。
141 :
デフォルトの名無しさん :02/08/14 22:06
DelphiのTApplicationウィンドウは可視という罠
142 :
デフォルトの名無しさん :02/08/15 01:18
質問なのですが Sleep関数の精度っていうのはどの程度なのでしょうか? どうも1ミリ秒単位で正確ではないようなのですが。 やはり正確さを取るには for(dwTime=timeGetTime()+10; timeGetTime()<dwTime; Sleep(0)); のようにするか、for文の中でQueryPerformanceCounterを回して 時間の差を判定するしかないのでしょうか。 でも、こうするとやたら重くなるのでできればSleepのような軽い関数が あればいいなぁ・・・
timeGetTime()だってSleep()と同じ精度だろ。
144 :
ssssss :02/08/15 06:01
>>122 今回の場合に使えるかどうか分からないけど、
WM_NCHITTESTを処理すれば、
特定の辺だけサイズ変更できる(マウスでドラッグできる)
ってことができるんじゃないかと思います。
>>142 正確な時間を何の為に欲しいの?
Win32アプリだと QueryPerformanceCounterを使っても スレッドが割り込まれると駄目だしさ
146 :
YahooBB237224045.bbtec.net :02/08/15 10:17
100万回は既出だと思いますが,jpg画像 を表示 する段取を初心者用に 書いたアーティクルはないもんでしょうか. 「猫でもわかる」その他検索しましたが見つけられません. スージプラグインとか必須ですか?
>>143 違います。
timeGetTime()は1ミリ秒ですが
Sleepは最低5ミリ秒くらいの精度になります。
>>145 ある一定の間隔でポートから出力したいんです。
±0.1ミリ秒程度の精度が欲しいのですが、やはり無理なのでしょうか。
>>146 前スレでOleLoadPicturePathを教えてもらいますた。
環境により使用関数は変わりそう。
151 :
デフォルトの名無しさん :02/08/15 19:30
メモリを追加/解放したい時って VirtualProtect で 要求サイズを変更すればいいんでしょうか? その場合元のメモリの内容は保障されてるのでしょうか? よろしくお願いします。
いっそのことDirectMusicのアレを使うとか。重いが。
d
>>151 悪いことは言わないから、おとなしくmalloc/freeを使っとけ。
図形を移動させる方法を教えてください。 VBの場合ならshape1.move x,y でできましたが、 APIはRectangle(hdc,x,y,x+10,y+10); をどこのプロシージャで使えばいいか分かりません。 しかも上記のアルゴリズムでは移動するということではなく、 次々と新規に描かれていくように思えます。 だれか図形を移動させる方法教えてください。
157 :
デフォルトの名無しさん :02/08/15 21:38
>>155 VirtualProtectってCなの?
C++ならnew/deleteだと思われ
159 :
デフォルトの名無しさん :02/08/15 22:04
SetWindowRgn() では WM_PAINT が発生しますか? もしそうだと case WM_PAINT: でこれをつかったら ∞ループにはまりますよね.
>>155 いぢわるしないで教えてください。
malloc/free に当たる処理を作りたいんです。
>>157 realloc に当たる処理が無いですけどね < new/free
普通は std::vector 使うから。
というか VirtualAlloc が成功しないです…。
何が悪いんだろう…
とりあえず某 VB のサイトにあった引数を参考にして試してるのですが…。
VirtualAlloc (NULL, 4096, MEM_COMMIT, PAGE_READWRITE | PAGE_NOCACHE );
環境は Windows2k です。
アドバイスお願いします。
162 :
デフォルトの名無しさん :02/08/15 22:46
RegisterClassに渡すウィンドウクラスの名前は、全角文字でも問題ないですか? もしかしたら、NT系/非NT系によりますか?
> SetWindowRgn() では WM_PAINT が発生しますか? 最後のパラメータを false にすると発生しないと思う > もしそうだと case WM_PAINT: でこれをつかったら 普通、そんなに頻繁にウィンドウリージョンを設定しないだろ
>>162 普通そんなこと誰もしない=誰も知らないバグが残ってる可能性がある
やめとけ。
>>161 PAGE_NOCACHE
が怪しい。こんなものはまず使わん。
またケコーン…
>>165 ,
>>166 ケコーンおめでとうございます。
ちょっと簡略化の為に嘘書いてました。
要求サイズをページサイズ分に切り上げる処理を書き間違ってて
中途半端なサイズを要求していた事が原因でした。
で、やっぱり VirtualProtect でサイズを変えることは出来ないんでしょうか?
170 :
コギャルとHな出会い :02/08/15 23:10
http://kado7.ug.to/net/ 朝までから騒ぎ!!
小中高生
コギャル〜熟女まで
メル友
i/j/PC/対応
女性の子もたくさん来てね
小中高生大歓迎です
全国デ−トスポット情報も有ります。
全国エステ&ネイル情報あります。
激安携帯情報あります。
>>169 どうやっても無理。おとなしくmalloc/free使っとけって。
>>171 やっぱり Heap系じゃないと増分は無理なんですか?
そういう書き方だと教えてくれてるのか煽りなのか区別がつかないもので…。
>>172 でっかいプールを作るのに VirtualAlloc を使いたいんですよねー
174 :
デフォルトの名無しさん :02/08/15 23:26
前スレでマウスの変位が右から左にどんどん移動するような グラフを書きたいといって、 右端で直線を引きながら BitBlt(memdc, 0, 0, 520, 460, memdc, 1, 0, SRCCOPY); (memdcは裏画面のデバイスコンテキスト) というようにすれば右から左に流れるような直線が書けると 教えていただいたのですが、これだとやはり時間がかかってしまいます。 何か高速な画面の移動の方法は無いでしょうか。
176 :
デフォルトの名無しさん :02/08/15 23:36
>最後のパラメータを false にすると発生しないと思う なるほろ. しかしそれではせっかく設定したリージョンが..
177 :
デフォルトの名無しさん :02/08/15 23:37
>>175 早レスありがとうございます。
XORっていうのは、
LineToを呼んで、背景色と色AのXORの色Bで直線を描画して、
今度は色Bの上から色Aで描画すれば背景色に戻る
っていうので合ってるでしょうか?
LineToを何度も呼ぶことになると思いますが、その方が高速なんでしょうか。
>>173 煽っているつもりは全くないのだが。
VirtualProtectはメモリの保護モードを変更するものなので、
サイズを変更することはできない(てか、ヘルプ読めよ)。
unixのbrkのような使い方をしたいのであれば、
あらかじめVirtualAllocで巨大な領域をreserveしておいて、
必要になった時点でcommitすることで、似たような動作にすることはできる。
>>164 そうですかぁ。(しょっく)
めんどくさいので、最初のウィンドウを作成するときに、そのウィンドウのタイトルで
ウィンドウクラスを登録しようかと思ったんですが。
>>164 単にクラスを識別するだけの役割しかないのに、
文字列の内容が関係すると思うか?
>>173 増やすときに、VirtualAllocの lpAdressに、予約済み領域の直後のアドレスを
指定(ページ境界に注意)してやればいいのでは?
183 :
デフォルトの名無しさん :02/08/16 00:34
>>178 > サイズを変更することはできない(てか、ヘルプ読めよ)。
「要求するメモリのサイズ」って書いてあった(VirtualAllocで指定したサイズでなければいけないとは書いてなかった)ので
変更は可なのかなー等と思ってしまいました。
> あらかじめVirtualAllocで巨大な領域をreserveしておいて、
> 必要になった時点でcommitすることで、似たような動作にすることはできる。
なるほろ!これは気がつきませんでした。
ありがとうございます。
>>173 ありがとうございます。その手もありますね。
しかしライブラリ等の弄れない部分がOSからメモリー割り当てしてると失敗してしまいますね…(当たり前ですけど)
ポインタ比較に意味無くなってもいいからヒープ毎に独立したアドレス空間欲しぃ…。
とりあえず
>>178 さんのアドバイスを元に頑張ってみようと思います。
皆さんありがとうございました。
>>174 ScrollWindowとかScrollDCとか
186 :
DOSっていいな :02/08/16 02:18
DOSの時代にはEMMやバンク切り替えっていうのがありましたが、 これと同じようなことをWindowsからできないのでしょうか。 別プロセス空間に2Gバイト近くのメモリーをそれぞれ確保しており、合計で 6Gバイト以上のアドレスを確保しています。この別プロセスのメモリーを共 有メモリーでランダムアクセスしたいのですが、 1:OpenProcessからReadProcessMemory, WriteProcessMemoryでは一旦コピー してからのアクセスになるためランダムアクセスに向きません 2:ファイルマッピングでメモリーファイルにすると、アドレス空間が2Gバイ トに限定されるため、大量に取得したメモリー全部にアクセスすることがで きません。 別プロセスのメモリー空間のポインタを取得する(実アドレスに割り当てる) APIってないでしょうか。
>>186 6Gの仮想メモリで何がしたいねん?
結局は単一の物理メモリやん。
> 合計で6Gバイト以上のアドレスを確保しています win32でできたっけ?
190 :
DOSっていいな :02/08/16 03:08
>>188 各プロセスはリニアに32ビット(4Gバイト)のアドレスしかアクセス
できませんが、(実際はOSの都合で2Gバイトしか確保できない)
別プロセスではそれぞれのセレクタが別の物理メモリー空間をアドレス
するようになります。
この辺はOSの仕事ですが、実際に確保できてしまいます。
>>186 たとえば、スキャナからの画像を9600BPIでA3全体を読み込むと
数Gバイトになります。もちろん今作っているのは、こんな馬鹿
みたいなこととは違いますが。。。
>>190 OSのメモリ管理限界より、実メモリが増えてなきゃ、
そもそも意味がないだろ。
192 :
DOSっていいな :02/08/16 03:46
>>191 確かに。
メモリーは誰かが金出して、10Gバイトくらい載るマザーボードと
メモリーを用意するだろう。
インテルCPUではFS,GSのセレクタレジスタが遊んでいるので、
それぞれ別空間をポイントできないかと考えたわけだ。
あるいは、OSからすれば、ページングで同じ物理メモリーを2つのプ
ロセスのリニアアドレスに割り当てればよいことで、簡単にバンク切り
替えができるのかと思って調べたが、見当たらなくてここで質問してい
ます。
>>169 > で、やっぱり VirtualProtect でサイズを変えることは出来ないんでしょうか?
MSDN Library を読んだ上で言ってるのか?
VirtualProtect は割り当てられたページの属性 (read/write/execute) を設定
する API。CPU がサポートする仮想記憶システムで使うデータベース(ページ
テーブルやディレクトリテーブル)の属性部分だけ仮想化したもの、といや良い
のかな。
俺も試したことはないんだが
>>189 が言ってるように VirtualAllocVlm 系の
API を使うか、ファイルマッピング (CreateFileMapping) とかでどうかねぇ。
>>191 IA-32 だと、仮想記憶アドレスの限界以上の実メモリを使える。36bit PSE あ
たりのキーワードで検索すると出てくると思うけど。
194 :
DOSっていいな :02/08/16 04:05
ありがとうございます。 VirtualAllocVlmって、64ビットのアドレスが返るのですね。 Borland C++Builderを使っているのですが、どうやって使う のでしょうか。
>>175 特許は最近話題になったものだけにあるわけではないぞ
>>193 私の質問はもう終わってるんだけどな…。
直後に似た API の質問だから混同してもしょうがないけど。
でもやっぱり後でもう一回来てよかった。
なんかその Vlm ってのも調べてみようっと。
あと、
>>178 さんに教えてもらったやり方でバッチグーに実装できました。
マジでありがとうございました。
>>186 >2:ファイルマッピングでメモリーファイルにすると、アドレス空間が2Gバイ
> トに限定されるため、大量に取得したメモリー全部にアクセスすることがで
> きません。
うそー?MapViewOfFile でマップするファイル位置を指定出来ただろ?64ビットで
200 :
デフォルトの名無しさん :02/08/16 10:16
複数のキーを同時に押しっぱなしにしていると Windowsから警告音が来てしまうんですが、 これを止める方法はないでしょうか?
>>199 MapViewOfFileEx() の方かね。
いずれにせよ返ってくるのは LPVOID だから「大量に取得したメモリー全部に
アクセスすることができない」と思うが、そこは手作業でファイルマッピングの
切り替えだろう。
(狭い仮想アドレスを使い回す以上、バンク切り替え相当の手間が掛かるのは、
仕方ないよな)
202 :
デフォルトの名無しさん :02/08/16 13:42
AdministratorじゃないユーザからAdministratorでないといじれないレジストリのキーをいじるにはどうすればいいでしょうか?
204 :
デフォルトの名無しさん :02/08/16 14:51
>>203 いえ、そういうのじゃないですよ。
レジストリの特定のキーを削除したいんです。
とりあえず今考えてるのはレジストリをいじるだけのプログラムを作ってお
いて、それを別ユーザとして起動すればいいかな〜って思ってるんですが、
もう少しスマートな方法がないかと思いまして。
>>204 > レジストリの特定のキーを削除したいんです。
なぜ?
一般論として言えば、Administrator しか削除できないキーを一般ユーザが削除する
のは(仮にできたら)、致命的なトラブルになるぞ。本当に必要なら、そのユーザに
ローカルマシンの Administrator 権限を付与するのが正道と思われ。
206 :
デフォルトの名無しさん :02/08/16 15:49
>>205 それでは、Administratorでない場合はどうでしょう?
他のアプリケーションの設定などを別ユーザからいじるということはできますか?
>>206 必要ならAdministrator権限をもらえって事だよ
そんな簡単に権限無視が出来るんじゃなんのためのユーザー管理だよ
ここですか、クラッキングツールを作ろうというスレは。
いえ、Administratorを要求するエロゲプログラマがいるスレです。
微妙にスレ違いかもしれないですが。 Windows2000でファイルを選択してマウス右ボタンのプロパティから概要タブで タイトルやコメントとかを設定できますけど、 あれってどこに記録されているのでしょう & 設定するAPIはあるのでしょうか。
設定するAPIはOleなんとかかんとかというのがたぶんある気がする
215 :
デフォルトの名無しさん :02/08/18 03:50
動的にダイアログの中にダイアログ(コンテナ的な役割)を置きたいんですが、 ダイアログテンプレートで作成することはできますか? なんかDLGITEMTEMPLATEの中はクラス名かIDが必要みたいなんですが、 ここにダイアログを直接置くことはできないんですか?
217 :
StretchDIBits :02/08/18 13:03
hBitmap = (HBITMAP)LoadImage(hInst, FileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); GetObject(hBitmap, sizeof(BITMAP), &bmp_info); wx = bmp_info.bmWidth; wy = bmp_info.bmHeight; hdc_mem = CreateCompatibleDC(hdc); SelectObject(hdc_mem, hBitmap); StretchDIBits(hdc,0,0,wx, wy, 0,0,wx, wy, pBits,&bmp_info,DIB_RGB_COLORS,SRCCOPY); とした場合最終行のpBitsには"DIBのビットデータの先頭へのポインタ" をいれるという説明なのですが,これはどうやって取得できますか?
218 :
API学くん :02/08/18 13:03
質問です。 リッチエディットコントロールをSDKのC言語で組もうとしてる者です。 EDITSTREAM構造体のdwCookieとpfnCallbackメンバを設定して、 EM_STREAMINメッセージでストリームにデータを送ってリッチエディット コントロールに表示させるらしいという事がわかりました。 しかし実際に表示させようとしても、やり方がわかりません。 具体的に言うとchar goku[30]="こんにちは"という、メモリ上のデータを 表示させようとするときdwCookieに何を指定するのか分かりません。 es.dwCookie = (DWORD)goku;のように指定しても駄目でした。 ファイルを読み込んでそれを表示する事は出来るのです。 dwCookieにCreateFileで作成したhFileを指定すれば、ファイルの内容が リッチエディットコントロールに表示されました。 es.dwCookie = (DWORD)hFile; という感じで大丈夫でした。 ネット上で調べたのですが情報がありません。 メモリ上のデータをリッチエディットコントロールに表示するにはどうすれば いいか教えて下さい。
>218
コピペじゃ駄目?
CHARRANGE cr;
cr.cpMin = cr.cpMax = -1;
SendMessage(hRich,EM_EXSETSEL,0,(LPARAM)&cr);
SendMessage(hRich,EM_REPLASESEL,0,(LPARAM)"こんにちわ");
SetWindowText(hRich,"こんにちわ");
でもいいかも。
参考→
ttp://www.kumei.ne.jp/c_lang/sdk2/sdk_130.htm
>217 StretchDIBits() → StretchBlt() じゃないの?
ダウンロードして見れるWin32APIリファレンスはありませんか?
>>221 Platform SDK にドキュメントついてきたと思うが。英語だけど。
>>219 コピペという方法があったのですね。
リッチテキストを扱うからエディットストリームだという固定観念で調べてました。
普通のエディットコントロールも知らないで、いきなりリッチエディットを
作ろうとしたのが勘違いの元でした。
どうもありがとうございました。
224 :
APIビギナー :02/08/18 16:43
program 中から現デスクトップ画面のスクリーンショットをBMP に落とすにはどんな方法がありますか?
GetDC(0)してお好きにどうぞ 2000/XPではCAPTUREBLTをお忘れなく
>>221 MSDNに入れば、「Subscriber Downloads」でダウンロードできるよ(藁
227 :
APIビギナー :02/08/18 19:35
>GetDC(0)してお好きにどうぞ >2000/XPではCAPTUREBLTをお忘れなく を,どうも.猫でもできる,を参考にしてやって見ます. ところでウィン98だと選択の度にWM_PAINTで書きなおして表示されて いた画像が,Xpだと全く更新されないままになるってのは 何が原因でしょうか.
228 :
デフォルトの名無しさん :02/08/18 20:13
動的にダイアログの中にダイアログ(コンテナ的な役割)を置きたいんですが、 ダイアログテンプレートで作成することはできますか? なんかDLGITEMTEMPLATEの中はクラス名かIDが必要みたいなんですが、 ここにダイアログを直接置くことはできないんですか?
プロパティシートにするのが楽だとおもうのだが、、
VisualC++で保存したWin32APIを開いてビルトすると "外部参照 1 が未解決です。" みたいなメッセージがでてきてエラーになるんですが、 そのまま元に戻す方法だれか知りませんか?
>>230 取りあえず他のスレにまで迷惑かけるなって。
>232 日本語? まぁお前ら天才だからこれくらいの日本語理解できるんとちゃうん? お前は天才じゃなかったか。スマソ >231->233 ここはWin32API質問箱だぞ? スレに関係ない話題はやめろ荒らしめ
>235 とにかく、230の質問が解ればそれでいいのだ。 隣でVisualC++開いている。 2chで問題が解決すれば得だろ?
>>236 お前さぁ、自分で考えて書いたんじゃなかったのか?なぜコンパイルできん?
また、
どこかで見つけたブラクラを書き込め!
系のこの板でもっとも頭の悪い部類に入るスレかよ・・・。
>238 お前さぁとか偉そうなこといってねぇで、 そのまま実行できんかったらコードを 新規作成したファイルにコピーすればコンパイルできることに気づけよ。 まぁ確かに俺の書いたコードは下らないものかも知れないが、 別にここはプログラム技術板なんだからブラクラより マシだと思うぞ。
どうせ、なんかのlibをリンクし忘れてるんだろ。
>241 なるほど参考になりました。
で見当はずれだったら自分の伝達能力を棚に上げてまた暴れるんだろーなー
>243 必死だな(藁
>>242 うわああああ
dumpbinも知らん
mlも使えない
スーパーDQNだぁぁぁぁ
HNのとおりデリられるべき香具師だな
246 :
デフォルトの名無しさん :02/08/19 16:15
GetDIBitsとSetDIBitsの第一引数で指定する HDCについて教えてください。 hDC = GetDC( hWnd ); hDCMem = CreateCompatibleDC( hDC ); hBmp = CreateCompatibleBitmap( hDC, 64, 64 ); SelectObject( hDCMem, (HGDIOBJ)hBmp ); 上のコードの後に、 GetDIBits( hDC, hBmp, … ); としても、 GetDIBits( hDCMem, hBmp, … ); としてもうまく動きます。これはどういうことなのでしょう? HDCならなんでもいいのでしょうか? (ちなみに、NULLだとうまく動きませんでした)
>>246 どういうことも何も、
hDCMemはCreateCompatibleDCで作ったんだから、
hDCと互換性があるに決まってる。
試したことないけど、
やっぱ、プリンタのHDCとか使ったら駄目じゃない?
>>247 動作に互換性があるのはわかるのですが、
>SelectObject( hDCMem, (HGDIOBJ)hBmp );
としているわけですから、
GetDIBits( hDC, hBmp, … );
でうまくいくのが不思議に思いまして。
GetDIBItsやSetDIBitsの場合、デバイスコンテキストに
設定した値(SelectObjectで指定したオブジェクトなど)は
全く影響なしということでいいのでしょうか?
>>246 さーん
CreateDIBSection() と同じで、DIB_RGB_COLORS である限りは HDC は
まったく参照されないんじゃなかったっけ? (HDC は NULL でいい)
251 :
デフォルトの名無しさん :02/08/19 21:15
すみません教えてください。 リストボックスに、文字を追加して行きたいと思い下記のようなコードを打ちました SendDlgItemMessage( hWnd, IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)Buff ); たしかに、文字はリストボックスに追加されたのですが、どんどん追加していくと スクロールバーができ、入力している文字がリストボックスから見えない位置に いってしまいます。 最後に出力した文字が、常に見える状態にするにはどうすればよいのでしょうか? MFCだと、SetCurSel( m_ctl.GetCount()-1 ); でいいみたいなんですが、apiだとどうして良いのか、分かりません・・
253 :
デフォルトの名無しさん :02/08/19 21:33
VisualC++6 Pro SP5でCreateJobObjectがつかいたいのだけど error C2065: 'CreateJobObject' : 定義されていない識別子です。 っていわれちゃう。 なんでだよヽ(`Д´)ノウワァァァァン #include <windows.h> #include <winbase.h> #pragma comment(lib,"kernel32.lib") int main(int argc, char* argv[]) { HANDLE hJob = (HANDLE)CreateJobObject(NULL, "testjob"); return 0; }
>>253 CreateJobObject は Windows 2000 以降の API だけど、
ちゃんとそれに対応した新しい Platform SDK 使ってるかね。
>>253 ヘルプに
>対応情報
> Windows NT: バージョン 5.0 以降を使います。
って書いてあるよね。
実行環境のWindowsのバージョンに依存するときは、
_WIN32_WINDOWSや_WIN32_WINNTというマクロが必要だよ。
↑
をヘルプで引いてごらん。
#define _WIN32_WINNT 0x0500
とか、
>Visual C++ 6.0: To specify compiler options,
>go to the Projects menu and click Settings,
>then select the C/C++ tab.
とか、することになってるよね。
>>249 >「hbmp パラメータが示すビットマップが
>デバイスコンテキストで選択されている場合、
>この関数を呼び出さないでください」とあるんだが。
あ、本当だ。見落としてました。(^^;
>>250 >CreateDIBSection() と同じで、DIB_RGB_COLORS である限りは HDC は
>まったく参照されないんじゃなかったっけ? (HDC は NULL でいい)
なるほど、HDCはパレットの情報を得るのに使っているんですね。
調べてみると、SetDIBitsのところにも、NULLでいいと書いてありました。
ところが、実際にNULLを指定すると、なぜかエラー(戻り値=0)が
返ってきます。他のパラメータが間違っているのかな???
GetDIBits・SetDIBitsの前後を調べてみることにします。
とりあえず、ありがとうございました。
>>247 >>249 >>250
>>250 よく読め
>>246 はNULLだとダメだったとちゃんと言ってるぞ
GDI関数で第一引数にHDCを取るものは
どのドライバを呼び出すか決めるためにHDCを使うんだから
この場合ディスプレイドライバが作ったHDCならなんでもいいけど
NULLはダメ
訂正: >調べてみると、SetDIBitsのところにも、NULLでいいと書いてありました。 正確には、「無視されます」とあり、 「NULLでもいい」と書かれてあったわけではありませんでした。 失礼。
259 :
デフォルトの名無しさん :02/08/20 00:16
今までMFCを使っていました。 Win32APIだけで組めばプログラムのファイルサイズがかなり小さくなると 思ったのですが、実際にダイアログリソースを表示するだけの簡単なプログラムを 作ってみるとMFCで共通DLLを使ったものよりも大きくなってしまいました。 MFC(共通DLL使用)→28KB Win32API→44KB こんな具合です。 もうちょっと(せめてMFC版よりも)サイズを小さくするにはどうしたらよいのでしょうか?
>>259 必要な処理をDLLに持っていって本体はWinMain()のみにする。
MSVCRT.DLLを使うようにする。
>>259 サイズの比較になってねーぞ
MFC(共通DLL使用)→28KB + sizeof MFC42.DLL
263 :
デフォルトの名無しさん :02/08/20 00:24
#include "stdafx.h" int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { keybd_event(VK_SNAPSHOT,0,0,0); return 0; } 昨日も聞いたんだけどサー,これでデスクトップのショットが取れないのはなぜ? アクティブウィンドウしか取れない. alt 押してないのに. 証拠画面もうぷするか?
>>263 そんなことせんでもGetDC(0)したのをBitBltすれば良かろう。
つぅか誰にそのキーイベント送ってるのさ?
>>259 upx --best --crp-ms=100000 filename
とかどうよ?
266 :
デフォルトの名無しさん :02/08/20 01:00
>そんなことせんでもGetDC(0)したのをBitBltすれば良かろう その通りなんですけど,キーコードがちゃんと送れてないのがげせない. >誰にそのキーイベント送ってるのさ OSにです.ペイントで貼り付けると一部しか取れてないんです. そのときのアクティブだけってことは alt + Pscrn が送られてることになる. げせねぇ
>>266 keybd_eventのヘルプの下の方は読んだか?
>>262 そんなこと言い出したらwin32apiだけだってdll使うっつーの
>>268 アフォですか? 比較するならmsvcrt.dllを使ったものと
比較すべきと言っているんだろ。
>>263 keybd_event(VK_SNAPSHOT,1,0,0);
keybd_event(VK_SNAPSHOT,1KEYEVENT_KEYUP,0);
2行目の1の後に,が抜けた。
272 :
デフォルトの名無しさん :02/08/20 03:18
273 :
keybd_event :02/08/20 07:38
了解 おさわがせしました
>>252 さん
解決しました、ありがとう御座います。
275 :
サービスしてね :02/08/20 15:31
管理ツールでサービスの開始停止をしてるけど、これってプログラム上ではどうしればよいのですか? レジストリの項目でServiceってのがあったので値を見てみたのですが特に変わってなかったです。
>>275 OpenSCManager, OpenService, ControlService, QueryServiceStatus
あたり。
>>276 Hit’sです!ありがとうございます!
>>259 アセンブラで書け
8kBぐらいにはなるだろ
279 :
デフォルトの名無しさん :02/08/20 18:51
>>272 の方がmsvcrt.dll使うより小さいしアセンブラよりずっと簡単。
なんせリンクするだけだから。
楽して小さくするならLIBCTINY。これ常識。
なんでそんなにサイズを気にするんだろ。 FDにぎっしりつめるつもりなのかしら。
>>280 高サイズはウイルスにとって致命傷ですから。
282 :
デフォルトの名無しさん :02/08/20 19:06
PmenuH = LoadMenu((HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), "IDR_PopMenu"); でメニューハンドルの取得に失敗するんですが理由がわかりません。 どなたか教えてください。
285 :
デフォルトの名無しさん :02/08/20 21:08
>>283 MAKEINTRESOURCE(IDR_PopMenu)でやってみたら?
286 :
デフォルトの名無しさん :02/08/20 21:18
RegDeleteKey関数で サブキーを持つキーを一度で削除しようとしたところ できませんでした。 ヘルプを見るとNT/2000では サブキーを持つきーを指定することはできないと書いてありました。 2000でサブキーごとキーを削除するには どうすればいいでしょうか? サブキーを検索していってひとつずつ 削除するのが賢いやり方ですか? それとも他に代用できる関数があるのでしょうか? よろしくお願いします。
288 :
初心者です! :02/08/20 22:00
WINDOWS2000を使ってるのですが、DOSでアセンブラ言語を実行しようとするとずっと実行中になってしまい処理が終わりません。きちんとリンクまではできてるはずなのですが・・・ 時々コマンドを実行しようとすると、VDDの形式が無効ですってエラーメッセージが出るのですがなんか関係あるのでしょうか? 原因がまったくわかりません!誰か教えてください!
>>286 >サブキーを検索していってひとつずつ
>削除するのが賢いやり方ですか?
いや、愚かなやり方です。
毎回そんなことを考えずに済むように
しておくのが賢いやり方です。
どうすべきか、わかりますね?
>289 わかりません。 もうすこし具体的に言ってもらえませんか? >毎回そんなことを考えずに 自分でサブキーを検索して消していく 関数を作っておけということですか?
>>290 特定のやり方を押し付けたくありませんが
反問されている内容については
方向性はあっていると思います。
自分で作るサブキー名がわかってるなら 消すキーの中にサブキーをデータとして入れちゃえ とか言ってみるテスト
レスありがとうございました。 結論としてはWin2kでサブキーごとキーを削除するには サブキーを検索していってひとつずつ 削除する、という流れで、 代用できる関数は用意されていないので 自作すべし。 ということで落ち着きました。 ありがとうございました。
>サブキーをデータとして サブキー名をデータとして テスト失敗
>>285 すいません。やってみたのですが、「IDR_PopMenu 定義されていない識別子」ですと出てきてしまいます。
ちゃんとリソースにはあるのですが・・・
>>295 実はリソースのヘッダをインクルードしてないとか...
外してる可能性大
やってしまいました。( ̄□ ̄;)!!! 285さん296さんありがとうございました。 お騒がせしました。m(_ _)m
298 :
デフォルトの名無しさん :02/08/20 23:39
現在自端末にDHCPから設定されているIPアドレスを ipconfig /release で開放。 ipconfig /renew で再取得 をしたく、ipconfigと同様なAPIを、検索で頑張って探してみたのですが 結局わかりませんでした。 WindowsCEならあるようなのですが。。。 どなたかご存知の方、教えてください。
>2000でサブキー削除 SHDeleteKey?
>>299 さん
ありがとうございます、
大当たりです。
試してみましたが無事一発で消えました。
実は自分でSHDeleteKey関数と
同じようなの自作してる途中でしたw
ありがとうございました。
教訓
サブキーごとレジストリのキーを削除する場合は
SHDeleteKey関数を使用する。
>>259 以下のコードをa.cとa.rcというファイル名で保存して、
rc a.rc, cl a.c a.res でコンパイルすれば2048バイトになる。
9x系で動作しなくていいなら、cl /O2 a.c a.res /link /align:16
で1056バイトになる。
#include <windows.h>
#define IDD_DIALOG 1
#ifdef RC_INVOKED
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
#pragma code_page(932)
IDD_DIALOG DIALOGEX 0, 0, 87, 79
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 9, "MS UI Gothic", 400, 0, 0x80
BEGIN
DEFPUSHBUTTON "OK",IDOK,27,53,50,14,NOT WS_TABSTOP
END
#else
BOOL CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg){
case WM_INITDIALOG:
return 1;
case WM_COMMAND:
if (wParam == MAKEWPARAM(IDOK, BN_CLICKED))
EndDialog(hWnd, IDOK);
return TRUE;
default:
return FALSE;
}
}
void Startup(){
DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG), NULL, DlgProc);
ExitProcess(0);
}
#pragma comment(linker, "/subsystem:windows /entry:Startup /merge:.rdata=.text")
#pragma comment(lib, "kernel32.lib")
#pragma comment(lib, "user32.lib")
#endif
>>300 教訓は2chでのレスは鵜呑みにしないってこった
303 :
デフォルトの名無しさん :02/08/21 00:33
>>301 キタ━━━━━━━(゚∀゚)━━━━━━━ !!!!!
>>300 ただしIE3だか4だかが入ってないWin95では動作しない罠
Win95をサポート範囲外にするならどうでもいいかも
>304 IE4.0以降の環境が必要みたいです。 ご報告。
質問元の
>>286 で2000って言ってるんだから問題ない罠
307 :
デフォルトの名無しさん :02/08/21 01:43
mfc**.dllやMSVCRT.dllのバージョンとこれらのDLLがインストールされる タイミング(VSのSP○でインストールされるとかWindows98では標準でインストールされてるとか) を知るにはMSDNのどこを見ればよいのでしょうか? またはそれらが書いてあるサイトはあるでしょうか? MSDNやgoogleで探してみたんだけど見つかりませんでした。
一番あやしいのはofficeだろうけど情報はまとまってないと思った。 でもここ3年ぐらいはDLL問題を聞かないなあ。 みんなstatic linkにしちゃったのかな。
Oracleでバックアップリカバリのテストをしようと思い、 強制的にファイルをぶっ壊す事が出来ないかと思ってます。 普通にエディタとかでファイルを開いて内容を変更して 保存しようとしても、他のプロセスが使用中とか いわれちゃうんですが、APIでどうにかなったりしませんか? #実運用時に突然DBが壊れた状況を作り出したいのです
Winアプリからデータベースにアクセスするにはどうすればいいのでしょうか? 何かモジュールやライブラリがいるのでしょうか? MFCでAppWizardを使うやり方はなんとなくわかったのですが、SDKでやる方法 がわかりません。どなたか教えてください。
>>311 使用するデータベースと、接続法法によるけど。ADO 使うなら msdao15.dll あたり
を #import して使う。
>>309 \\.\PhysicalDriveNをRaw I/Oすればできそうな気もするが、
それより安いハードディスクを買ってきて物理的にぶっ壊す
ほうが安上がりかも。
実体のあるファイル別ディスクに入れといてケーブル抜くだけでいいじゃんよー
PrintDlgを使って印刷しようとしてるのですが、 SDKで複数ページ印刷は難しいんですかね? と言うか、総ページ数の取得ってできないものなんですか?
316 :
デフォルトの名無しさん :02/08/21 20:43
ウインドウのサイズを変更できないようにするにはどうすればいいのでしょうか?
複数の音(wav)を同時発声するにはどうしたらよいでしょうか。 PlaySound()ではムリなようだから なにかほかのAPIがあれば教えていただきたいんですけど。 WinMEで。←絶対条件
direct sound? MEが絶対条件とか言ってるようだと何も知らないみたいね・・・
物理的に壊すとアプリ(この場合oracle)じゃなくてシステム的にエラーが 起こってしまうんちゃうか。 システム的には正常で、アプリからは壊れているように見えることが 試験には必要なんでないの。
誰からもなしですね。。。残念です。 systemかjavaでやることにします。 質問の仕方まずかったのかなぁ。
321 :
デフォルトの名無しさん :02/08/21 23:05
ウインドウ領域を取得したいのですが 画面一番下にあるタスクバーの領域がとれません CWnd *pDeskTop = CWnd::GetDesktopWindow(); CRect m_rect; pDeskTop->GetWindowRect(&m_rect); タスクバーの部分も含めて取るにはどうすればいいですか
>>321 GetSystemMetrics(SM_CXSCREEN)
GetSystemMetrics(SM_CYSCREEN)
デスクトップウィンドウってタスクバー領域も含んでたような
質問です。 ビープ音を鳴らしたいのですが(スピーカーから出すのじゃなく)どうすればいいのですか?
>ビープ音を鳴らしたいのですが(スピーカーから出すのじゃなく) じゃあ一体どこから・・・。
327 :
デフォルトの名無しさん :02/08/22 15:55
EnumFontFamiliesExでフォント列挙してるのですが、フォント名の頭に @ が付いてる フォントをフィルタリングするにはどうすればよいのでしょうか? フォント名文字列の先頭に @ が付いてるかどうかを調べるしかないですか? フラグでもあるのかなーと思って質問してみますた。
328 :
デフォルトの名無しさん :02/08/22 16:22
カーソル位置でカーソル形状を変えたいんですが、どうやるか教えてください。 WM_MOUSEMOVEの処理で、カーソル位置の情報を調べて、LoadCursorで変更し ようと思ってます。 カーソル位置が、キャレットであるとか、ビットマップであるとか調べる方法が わからないです。
>>325 Beep()なAPIでどうだ? 漏れは使ったこと無いが。
>>326 マザーから鳴るのを知らないのか?
(厳密にはマザーじゃないかも知れんが。)
とんだ坊やだな。
>>329 マザーボードに搭載されてる「スピーカ」からな。
とんだ赤ん坊だね。
331 :
デフォルトの名無しさん :02/08/22 16:55
>>330 M/Bに搭載されているブザーじゃねーのか?
ブザーとスピーカじゃ物が違うのだが、知ってるか?
ブザーの中に入ってるものがスピ−カー
つぅか電気的に作成した音を出すのは全部スピーカだろう。
きっとマザーが勝手に振動して音が鳴るんだ
この中で一番困った人は誰
1.「スピーカー以外」と指定した質問者である
>>325 2.つっこんだ
>>326 3.よく知らないのにとりあえずマザー説を唱えて煽った
>>329 4.おもしろがってる俺
>>335 スピーカーの原理ではあるがスピーカー機器ではないね。
だいたいそんなAPIがあるのか。
>>336 2.の時点では軽く困ったけどみんなのおかげで今は楽勝です。w
339 :
デフォルトの名無しさん :02/08/22 17:19
>>333 認識甘い。
君は車のクラクションがスピーカだと主張しているわけか。(藁
ブザーとスピーカー、音の発生方法が若干違う。 ブザーは振動物に固体を当てて発音している。 それはともかく、Beep()ってのがあるのは確かだな。
どうでもいいレスでスレがのびるのが一番困った。
>振動物に固体を当てて
デュアルショックにティムポをあてたらきゅー、きゅーと音が鳴るのですがブザーですね
>>343 ハゲシクワラタ
ナイスネタ
てかネタだよな
MessageBeep()
printf("\a");
煽り甲斐があったよ。てか、煽る気はあまりなかったが。 マザーに直付けのちっこいブザーやら、リード線引いてきてちゃちいスピーカーを付けるパターンやらがあるから とりあえずマザーと書いたんだが。 イメージ的にはあってると思うが、通じないかい? 漏れだけしか通じない罠なら逝ってきます。
この板と全然関係ない話のせいで
>>327 ,328の質問が流れてしまって…合掌
351 :
デフォルトの名無しさん :02/08/22 20:36
こんなんして B5縦 で印刷したいんですが。ちなみに RICOH の NX710 です。 HDC hdc2 = ::CreateDC(NULL, printernames[target], NULL, NULL); DEVMODE dmMode = {0}; dmMode.dmSpecVersion = DM_SPECVERSION; dmMode.dmSize = sizeof(DEVMODE); dmMode.dmFields = (DM_PAPERSIZE | DM_ORIENTATION); dmMode.dmPaperSize = DMPAPER_B5; dmMode.dmOrientation = DMORIENT_PORTRAIT; hdc = ResetDC(hdc2, &dmMode); プリンタにB5横しか入ってないと、プリンタに「A4入れろやゴルァ」と出るんです。 90度傾けて印刷させるにはどうアプローチすればいいですか?
>>351 プリンタのプロパティで縦方向印刷に設定しる!
>>352 うーん確かにそれだと出るんですが・・・・
ユーザに設定させたり保存させたくないんですよぉ
>>327 正解!ダトオモウ...
>>328 各コントロールをサブクラス化してWM_MOUSEMOVEを引っかける
のが妥当かな。
どっちも地震無し。
用紙縦=GetDeviceCaps(hdc2,HORZSIZE) * 100; 用紙横=GetDeviceCaps(hdc2,VERTSIZE) * 100; if(縦横のサイズ != B5サイズ){ MessageBox(hWnd,"B5にしてね(ハァト",NULL,MB_OK); exit(1); }
PageSetupDlgで、縦方向に設定したときと横方向に設定したときで、 DEVMODEがどう変わるか調べて、 それに合わせてソースを書く(w
>>327 英語版には縦書きという概念がないから日本語化のとき
先頭に@があるかないかをフラグ代わりにしたの
>>328 WM_SETCURSORという専用のメッセージがあるからそっち使え
>>351 こんな感じか?
PRINTER_INFO_2 *GetDefaultDevMode(LPTSTR name){
PRINTER_INFO_2 *pinfo2 = NULL;
HANDLE hPrinter;
if (OpenPrinter(name, &hPrinter, NULL)){
DWORD size;
GetPrinter(hPrinter, 2, NULL, 0, &size);
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER){
pinfo2 = (PRINTER_INFO_2 *)malloc(size);
if (!GetPrinter(hPrinter, 2, (LPBYTE)pinfo2, size, &size)){
free(pinfo2);
pinfo2 = NULL;
}
}
ClosePrinter(hPrinter);
}
return pinfo2;
}
HDC CreatePrinterDC(LPTSTR name){
PRINTER_INFO_2 *pinfo2;
HDC hdc;
pinfo2 = GetDefaultDevMode(name);
if (!pinfo2)
return NULL;
pinfo2->pDevMode->dmFields |= DM_PAPERSIZE | DM_ORIENTATION;
pinfo2->pDevMode->dmPaperSize = DMPAPER_B5;
pinfo2->pDevMode->dmOrientation = DMORIENT_PORTRAIT;
hdc = CreateDC(pinfo2->pDriverName, pinfo2->pPrinterName, NULL, pinfo2->pDevMode);
free(pinfo2);
return hdc;
}
359 :
デフォルトの名無しさん :02/08/23 10:51
紙2001みたく、他アプリケーションが、ドラックの開始をしたことと、 キャンセルを検知するのは、どーすんでしょうか?
ディレクトリのコピー/削除等の実装をSDKでやった事ある方は MFCのときはCFileFindクラスを使いますか? サンプル等探してもCFileFindクラスを使用した例があまり見当たりません。 使い勝手等何か問題あるのでしょうか?
>362 普通に便利だな、と思った。
364 :
デフォルトの名無しさん :02/08/23 20:35
exitのかわりになるWin32 APIってないですか?
ExitProcess
まあ普通はexit()するわな。Cランタイムが後処理してくれるし。
実行形式ファイルのバージョン情報を得るにはどうしたらいいんですか? 右クリック->プロパティ->バージョン情報 で出てくる情報を得たいんですけど、教えてください。
>>362 SDKだろうがMFCだろうがATLだろうが、ディレクトリ操作はSHFileOperation()
>>363 >>370 さんくすです。
NT4.0考えなくていい時はSHFileOperation()使います。
>>371 NT4.0でも使えるのですが・・・ ( ;´Д`)
>>372 検索してみたんですが、
SP1だと複数のファイルを指定すると失敗するらしいです。
↑実際に確認してませんので違ったらすいません。
>>369 GetFileVersionInfoだったっけ
こんなわかりやすいAPI名で人に聞くとはお前PG向いてないよ。田舎帰れ
最近いろいろなアプリケーションでよく見かけますが、 ツールバーやリストボックスなどのコモンコントロールで、 背景に画像を設定するにはどうしたらいいですか? 検索しても背景色がせいぜいだったので教えていただけないでしょうか。
378 :
デフォルトの名無しさん :02/08/24 19:47
>>377 コモンコントロール・・・
それ、VB板で聞いたら?
間違った。 VBスレね。
380 :
デフォルトの名無しさん :02/08/24 20:00
>>380 378 が何か勘違いしてるんだろ。放置しといてやれよ。
>>351 >>358 に便乗するっす。長くてすんません。
CreateDC に DEVMODE 構造体を渡す前に (
>>351 さんは代わりに ResetDC を
使ってるけど) DocumentProperties() を呼ばなくてもよいんですっけ。
DocumentProperties(NULL, hPrinter, pszPrinterName,
pDevMode, pDevMode,
DM_IN_BUFFER | DM_OUT_BUFFER);
みたいな感じ。
私が試している限り、あってもなくても関係なさそうだったんだけど
なんだか「偶然動いてるだけ」な感じがして気持ち悪いです。
MSDN によると「現在の設定を使うならこの DocumentProperties は不要」と
読めるんですよね。ここでもう混乱っす。
文書やネット上のサンプルコードや私が試した事をまとめるとこんな感じなんだけど:
上のようにして DocumentProperties を呼ぶと、"非"一時的に設定を変更
しちゃう。すなわち、次にアプリケーションを起動して DEVMODE を
取得してみると、前回 DocumentProperties で設定したモノが取得できる。
ていう解釈でよいと思いますか?
383 :
デフォルトの名無しさん :02/08/24 22:45
質問。 子ウインドウを作ると、その子ウインドウのほうが アクティブになると思うのですが、 親ウインドウの方をアクティブにし続けるにはどうすればよいでしょうか? 今は、子ウインドウを作ったあとにSetActiveWindow関数を呼んで 親ウインドウに戻しています。 また、終了するまでアクティブでい続けるような ウインドウを作ることはできるでしょうか。 誰かよろしくお願いします。
>終了するまでアクティブでい続けるような 使いたくねー、こんなアプリ
386 :
デフォルトの名無しさん :02/08/25 03:02
>>384 いや、別にみんなに配るようなアプリを作っているわけじゃなくて
自分で使うのに、アクティブで無くなると困るって言うだけなんですが。
挙動が激しく、トロイっぽいよね
388 :
デフォルトの名無しさん :02/08/25 13:32
画像を扱うアプリなんです。 高速な描画、表示が条件なんですが、どのような方法がベストなんでしょう結局。 まず、バックバッファ相当のモノについて、 1.DIBSectionを使う 2.ただのメモリブロックを使う 3.DirectDrawSurfaceを使う(システムメモリ上??) で、フレームバッファへの転送なんすけど、 1.Blt 2.アドレス拾ってmemcpy とか考えられるんだけど、いったいどうすりゃストレスない描画ってできるんでしょう? 例えばフォトショップとかmameとか、ああいったのはどういった方法で実現してるんでしょうか?
>>388 >フォトショップとかmameとか
同列で語って良いのか・・・?
390 :
デフォルトの名無しさん :02/08/25 13:45
>>389 どちらにせよGDIとか使わずに表示まで持っていってますよね?
で、どちらも膨大なリソースを表示しているって意味では
まともにグラフィック処理してるって思うんですよ。
その方法は全然違うんだろうけど・・・
>>390 >どちらにせよGDIとか使わずに表示まで持っていってますよね?
マジで?
392 :
デフォルトの名無しさん :02/08/25 13:52
>>391 違うの??よく知らないんだけど。
つーか普通にDIBとかからBlt、StretchBltとかって全然重いと思うんです。
mameの60fpsとかって全然無理なレベルぐらい重いんだけど・・・
画面モードとかによるのかな?
>>392 君、DirectXとかその辺の基本理解してからしゃべってる?
394 :
デフォルトの名無しさん :02/08/25 13:54
>>393 あんまり。基本っつーと、どんなことかな?
>>394 ハードウェアが「どんな操作を」支援してくれるのか、じゃないの?
396 :
デフォルトの名無しさん :02/08/25 17:38
Wininet で非同期通信をやろうと思ったんですが、 MSDNのサンプルを見るとスレッドを使っているみたいです。 WinSock ではスレッドを使わずにできたような気がするんですが、 Wininet ではスレッドを使わない非同期通信はできるんでしょうか。
>>378 Delphiで作った2chブラウザでも見かけるけど・・・。
結局どうやったらできるのかな?
見ましたよ>398 // Create a thread to handle the header and // resource download. cpContext->hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Threader,LPVOID(cpContext), 0,&cpContext->dwThreadID); このぶぶんでThreadを作っているけど、これをやらないではできないのかという話です。
>>377 ツールバーの場合はRebarをつかって背景画像をセットしてると思う。
OS が日本語Windowsか英語Windowsか調べられるAPIってあります?
>>402 おれはGetACP() == _KANJI_CPで判定しているが、もっとうまい方法があれば、知りたい。
しかし、マルチリンガル版も視野に入れたら、GetACPしか無いような気もするんだが。
GetSystemDefaultLCIDってのはどうだろう?
>401 ふむ、ためしてみます。
408 :
デフォルトの名無しさん :02/08/26 22:47
hInstanceを保存する必要ってあるの? 常にGetModuleHandle(NULL)使ったらまずい?
411 :
デフォルトの名無しさん :02/08/27 01:24
使っているWindowsが日本語版かどうかってどうやって調べるんでしょ? 特に無断転載する輩の多い韓国版では動かなくしたいんですけど。
ツールバーはRebarですか、どうも。 試してみます。
VBで使用するOCXを、VCで作っているんですけど そのOCXでエラーが発生した場合、VB側のOn Errorでそのエラーを捕まえたいんです。 その場合、OCX側でどのようなコードを書けば良いのでしょうか?
COMの境界をまたがって例外を投げてはいけない、と COMの偉い人がいってますた。
レスどーもです。 VB側のOnErrorで取れました。 が、 >416サソの「COMの境界を〜」って、如何いう意味なんですか? いまいち意味が判らんのですが...出来ましたら、解説をお願いします。
>>411 ライセンスを日本海ウェアか竹島ウェアに変更しる。
if(IDNO==MessageBox(,"竹島は日本の領土?",,MB_YESNO)) exit(-1);
>>416 C++の例外とCOMの例外を区別してないと思われ(先生はわかっていると思われ)
くそMFCだとそのあたりが隠蔽されているから、わからないと思われ。
つーか、S_OKとS_FALSE以外のHRESULT直接返せ。
>>411 ちょっと前にロケール識別子でFA出てる。
レジストリ変えられたらおしまいだから、色々複合してみるのもいいかもしれん。
>>421 話の流れからして Final Answer かな。
しかしFAなんて略すなや。
AFならAnal Fuckだったのに。
424 :
デフォルトの名無しさん :02/08/27 22:55
フラットツールバーの途中にコンボボックスを設置したいのですが、 どうやればいいのか教えてください。 現在、セパレータの幅を指定して挿入しているのですが、 フラットスタイルにすると真ん中に縦線がに入ってしまい、 上下に線が見えてしまいます。 コンボボックスを大きくすれば解決するのですが、 見栄えが悪くなるのでどうしたらいいか悩んでいます。 バイナリエディタのBzが綺麗にやっているのですが、 どうやったら良いのでしょうか。
FA:深キョン アナルファック
>> 425 thanks なわけねーだろ、thanks > 422
427 :
デフォルトの名無しさん :02/08/27 23:32
初歩的な質問なんですが、テキストファイルを読み込むとき、 一行ずつ読みたいのですがみなさんどうやっていますか? 一行ずつ読むAPIはありませんよね?というわけで 1.Cライブラリ関数を使う 2.ReadFileで全部メモリに読んでから一行ずつ抜く 3.ReadFileで一文字ずつ読んで改行を見つける のどれかになるのかなと思ったのですが、ライブラリ関数は使いたくない ということと、3.では遅くなるということを考えた場合、2しかないですか?
>>427 2.5 ReadFileで少しずつ読んで改行までを使う
っていうかどうしてライブラリが使いたくない?
430 :
デフォルトの名無しさん :02/08/27 23:59
>>430 分からないんなら、どこのメモリに読み込むの?
俺は最大行の長さを調べてからmallocして読み込んでいる。 ファイルサイズ分バッファを獲得してもいいけど、無駄といえば無駄だから。
sageてしまったのでアゲ
そのサイトに書いてある手順でOK 出来ないのならあんたに問題有り
描画ってもしかしてディスプレイか? それなら不可能。プリンタのDCへStretchDIBits汁
438 :
壁紙がかわらん :02/08/28 03:28
#include "stdafx.h" int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { SystemParametersInfo( SPI_SETDESKWALLPAPER, 0, "C:\\sample.bmp", SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE ); return 0; } 全く変化しません.(?_?) win98se + VC6
439 :
デフォルトの名無しさん :02/08/28 03:55
「Delphi」 これが読めなくて そろそろ一年。。 これはなんと発音すればいいのでしょう? デルピ??
↑ すみません、すれ違いとは思ったのですが、 どこで聞いてもすれ違いっぽいので書き込みました。 申し訳ない。
「でるふぃ」です
>441 おかげ様で人前で 「でるぴ」 などと発言し、恥をかかなくてすみました。 ありがとうございます。
実際の発音はde'lfaiで、カタカナ表記ではデルフォイ、デルポイと言うらしい。
>443 そうなんですか、 とりあえず 「でるふぃ」でいきますねw ありがとうございました。
>445 あっ。。 デルファイ って書いてあるw 情報ありがとうございます。 でも自分で言うのもなんですが、 低レベルな質問ですねぇ。
>>437 ディスプレイには使えないのですか?
言われてみると、そんな気もします・・・。
サンクス。
448 :
デフォルトの名無しさん :02/08/28 12:48
SetWindowRgnでリージョンセットして、 そのあとさらにSetWindowRgnであっさり新しいリージョンに置き換わると思ったら 置き換わらないYO! これってウィンドウ破棄してリージョンセットしなきゃ無理でつかね?
>>448 んなこたないよ、何回リージョン変えても併記だよ。
何かエラー出てるんじゃないの。
450 :
デフォルトの名無しさん :02/08/28 13:16
リージョン破棄とかもせずSetWindowRgnでよいのか? それでいいなら漏れのPCもうだめぽ(´д⊂
451 :
デフォルトの名無しさん :02/08/28 14:38
//DIB をファイルへセーブ hfile = CreateFile("aa.bmp", GENERIC_WRITE, FILE_SHARE_WRITE, NULL,CREATE_ALWAYS, 0, NULL); とすると aa.bmp が全く指定した覚えのないディレクトリ内に作成されてしまう んですが,原因はなんでしょうか. 途中で PaintDesktop() とかしてるんでカレントが変わってしまってるってこと?
GetCurrentDirectoryで確認してみれば?
453 :
デフォルトの名無しさん :02/08/28 14:54
↑お,了解.
454 :
デフォルトの名無しさん :02/08/28 15:47
GetOpenfileNameで ofn.lpstrFilter = "BMP files(*.bmp)\0*.bmp\0\0"; 同時に jpg も表示するにはどう書けばええんですか? (*.bmp,*.jpg) とか色々試したがだめや
455 :
デフォルトの名無しさん :02/08/28 15:52
"All image files (*.bmp,*.jpg,*.pcx)\0*.BMP;*.JPG;*.PCX\0"
456 :
デフォルトの名無しさん :02/08/28 15:53
自己解決でした↑
#define STRICT #include<windows.h> LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR CmdLine,int CmdShow) {HWND hwnd;MSG msg;WNDCLASS wc; wc.style=0;wc.lpfnWndProc=WindowProc;wc.cbClsExtra=0;wc.cbWndExtra=0; wc.hInstance=hInstance;wc.hIcon=LoadIcon(NULL,IDI_APPLICATION); wc.hCursor=LoadCursor(NULL,IDC_ARROW);wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1); wc.lpszMenuName=NULL;wc.lpszClassName="Hello"; if(RegisterClass(&wc)==0)return 0; hwnd=CreateWindow("Hello","Hello World",WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,NULL,(HMENU)NULL,hInstance,0); if(hwnd==NULL)return 0;ShowWindow(hwnd,CmdShow);UpdateWindow(hwnd); while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);} return msg.wParam;} LRESULT CALLBACK WindowProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam) {switch(message){case WM_DESTROY:PostQuitMessage(0);return 0;} return DefWindowProc(hwnd,message,wparam,lparam);} こんな俺はセンス内でしょうか
459 :
デフォルトの名無しさん :02/08/28 16:46
何回も聞いて申しわけないんですが以下で壁紙が変化しないのはどういう 原因がありえますかね.SystemParametersInfo の返り値は毎回0です.エラー #include "stdafx.h" int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow ) {SystemParametersInfo( SPI_SETDESKWALLPAPER, 0, "森.bmp", SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE ); return 0;}
460 :
デフォルトの名無しさん :02/08/28 17:04
ちなみに壁紙チェンジャの類はちゃんと動く. アクティブディスクトップを設定しても解除しても 上のプログラムは駄目.
森.bmp が見つからないとか?
462 :
デフォルトの名無しさん :02/08/28 17:08
質問です。 画像を表示させるにはどうやればよいですか?
展開->描画
465 :
壁紙変わらん :02/08/28 17:51
char s[]="森.bmp"; SystemParametersInfo( SPI_SETDESKWALLPAPER, 0,s , SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE ); としたら成功でした. lpszFileName,ってのは即文字列じゃだめなのか.
>>427 CreateFileMapping + MapViewOfFile でメモリにマッピングして
自力の loop で改行探せば?
467 :
デフォルトの名無しさん :02/08/28 22:37
WM_MOUSEWHEELが定義されていないってでるんですが このメッセージは16進数でいうといくつですか? 教えてください。
468 :
デフォルトの名無しさん :02/08/28 22:43
winuser.hより0x020A
469 :
デフォルトの名無しさん :02/08/28 22:47
ありがとうございます。 なぜかwinuser.hをインクルードしても定義されていませんってでるんですよね。 windows.hをインクルードしてもたしか自動的にインクルードされるような 気もするんですが。 気のせいだったらすみません。 とりあえず自分でdefineしてみることにします。
WM_MOUSEWHEELはwin98以降の定数だから、なんかdefineしないと定義されないのでは?
471 :
デフォルトの名無しさん :02/08/28 22:50
DISKTOPのHARDCOPYを取得するプログラムを書いているのですが、 OFFICEアシスタントだけ、キャプチャーできません。 CreateCompatibleBitmapとBitBltを使用しています。 どなたか、お知恵をお貸しください。 環境はVC 6.0、Windows2000です。
>>470 あ、そうですね。
_WIN32_WINDOWSの大きさを0x400以上に定義してみようかと思います。
ありがとうございました。
>>450 セットするほうのリージョンは毎回新しいの生成してる?
474 :
デフォルトの名無しさん :02/08/29 10:44
もしかしてリージョン毎回生成しないと無理でつか? 最初に作って使いまわしてる・・・(;´Д`)
475 :
デフォルトの名無しさん :02/08/29 12:56
>>471 そこらへんにころがっているフリーのキャプチャソフトでもとれないし。
もしかしてマウスカーソル?
あ、ミスったよ。 >WindowsがWindows Server製品と連係する際に使用する113種の通信プロトコル とは別物だな。
シェル関係のAPIを見てみたけどは2000/XP用のが多いね
SHCreateDirectoryってMakeSureDirectoryPathExistsと同じかね?
480 :
デフォルトの名無しさん :02/08/29 14:56
DirectX関係もかくしてたのですか、MSは。
自己解決しました。 Private Declare Function NetJoinDomain Lib "netapi32.dll"_ (ByVal lpServer As String,_ ByVal lpDomain As String_ ByVal lpAccountOU As String,_ ByVal lpAccount As String,_ ByVal lpPassword As String,_ ByVal fJoinOptions As Long_ ) As String こうやったんですが、原文はOPTIONALな部分も VBではoptionalを指定しちゃうとその後ろの引数を全部optionalに しなきゃいけないのでoptionalは外しました。
483 :
デフォルトの名無しさん :02/08/29 15:31
見たことあるAPIも含まれているようなんだけど、 どれが隠しだったの?
今までSHCreateDirectoryExは公開してたが、 今回は隠しAPIであるSHCreateDirectoryを新たに公開した。 ・・・ってあんまり得した気がしない。
今回オープンになったので役に立ちそうなのってある? あんまり見当たらない・・・
IsUserAnAdminが簡単でよい
jpgをビットマップファイルに取り込むためにOleLoadPictureを 使ってみたんですけれど、取り込んだデータ色数はディスプレ イの設定に依存してしまいます。 get_HandleからDIBSECTIONを参照する方法と、Renderを用いる 方法の2とおり試してみましたが、ダメでした。 やはりライブラリですか? 何か良い方法がありましたら教えてください。
Susie Plug-In
>>488 そういう方法も面白そうです、できればWindows APIで…
490 :
デフォルトの名無しさん :02/08/30 00:05
XPでユーザが切り替わったのを検知する方法ってあります? WM_USERCHANGED なんてあれば楽なんですが。
491 :
デフォルトの名無しさん :02/08/30 00:05
>>487 質問するときは、あげてもいいんじゃない?
というわけで、代わりにage
493 :
デフォルトの名無しさん :02/08/30 04:24
ウィンドウのメニューは普通、左側から並んでいますが、 たまぁに右側に一個だけ離れているソフトがありますけど、 あれはどうやっているのでしょうか?
urawaza
>>492 DirectShowですか。情報不足なので調べてみます。
>>496 GifもJpegもやっかいなことになってしまいましたねぇ。
今回は個人用ということで、見逃してください…。
498 :
デフォルトの名無しさん :02/08/30 17:12
LoadLibraryでtxtなどのファイルを渡すと「不正なイメージ」という エラーダイアログが表示されます。 LoadLibraryが失敗したときにはNULLが返ってくるだけで良いので、 このダイアログを表示させないようにするにはどうすればよいのでしょうか?
seterrormode
>>485 プロキシの設定だけはIEを参照して実際の接続はWinsockで
やるような場合、今までは自動構成スクリプトに対応するのが
面倒だったけどWinInetの新たに公開された関数で楽になった。
あとSwitchToThisWindow使うとフォアグラウンドロックを回避
できるのかな? (未確認)
503 :
デフォルトの名無しさん :02/08/30 20:14
隠しAPIリストのWindows FunctionsのFindWindow (に限らず他にもあるかもしれないけど未確認)は、 API自体は既出なわけだけど、それはAPIに隠し機能があったとか ドキュメントに隠し事項があったとかそういうことけ?
>>503 該当ページをWinInetで検索すればすぐ見つかるだろ…
まあいいや
DetectAutoProxyUrl
InternetGetProxyInfo
公開前からDependency WalkerでWININET.DLLを覗いて
「MSずるいよなー」とか思ってたから漏れ的には一番うれしい
>>504 FreeResourceとかFillMemoryに至っては何が新しいのか
さっぱり分からないです。
あとMultimediaのところにSndPlaySound(大文字)ってあるけど
これはsndPlaySound(小文字)とは違うの? なんかクリックすると
sndPlaySound(小文字)の説明が出てくるんだけど。
507 :
デフォルトの名無しさん :02/08/30 22:39
それにしても解説が手抜きだねえ はじめて公開した関数はほとんどパラメータの説明しかないし FreeResourceは現在return 0;だけの実装なのにいかにも いろいろやってそうな説明してるし(たぶん昔のSDKの解説切り 貼りしたんだろう)NtCreateFileに至ってはZwCreateFileの 置換し忘れがあるし(w
MS「はいはい公開すりゃいーんでしょ、公開すりゃ。ったく、たりーなぁー」 きっとこんな感じでリスト作ったはず。
Deprecated なものや、既存の公開APIの組み合わせで実現可能なもの、 将来無くなるかもしれんと断りのあるもの、明らかに単なる計算ルーチンなもの も結構あってなんだかつまらんです
つーか非公開APIって本来そういうもんでしょ 今回は仕方なく公開しただけで 問題はサードパーティーには「将来なくなるから使うな」とか何とか 言っておきながら「Microsoftのミドルウェア」は しっかり使ってるというダブルスタンダード
既存のAPIの組み合わせでできるといっても IsUserAdminとかInternetGetProxyInfoは手間がかなり違う。 自分でダイアログ用意すれば作れるからって コモンダイアログがいらないってことにはならないでしょ
>>513 そういう「これ以外に手段がありません」というやつだけ抜き出してほしかったり
やってみようか。 Single-Threaded Apartments いきなり挫折しますた(w
よく分からないのが多いんで逆に「これは明らかにいらんだろ」 というものを挙げてみます。 __WSAFDIsSet - 直接使わずFD_ISSETマクロで使う。 RtlConvertSidToUnicodeString - ConvertStringSidToSidを使う。 IsNetDrive - GetDriveTypeとWNetGetConnectionで代替できる。 OpenRegStream - SHOpenRegStream*を使う。 PathGetShortPath - GetShortPathNameでよい。 SHCLSIDFromString - CLDIDFromStringを使う。 SHCoCreateInstance - CoCreateInstanceを使う。 SHCreateDirectory - SHCreateDirectoryExで代替できる。 FreeResource - Win32では何もしないので不要。 RtlCharToInteger - strtolやwcstolでよい。 RtlUnicodeToMultiByteSize - WideCharToMultiByteでよい。 ExtDeviceMode - 16ビット時代の遺物。DocumentPropertiesを使う。 RtlCompareMemory - memcmpでよい。 RtlExtendedIntegerMultiply - __int64による乗算でよい。 RtlExtendedLargeIntegerDivide - __int64による除算でよい。 RtlUniform - CryptGenRandomで代替できる。 RtlUnwind - 直接使わず構造化例外処理を使う。 RtlIsNameLegalDOS8Dot3 - XP以降ならCheckNameLegalDOS8Dot3を使う。 IsBadHugeReadPtr - 過去の遺物。IsBadReadPtrを使う。 IsBadHugeWriteOtr - 過去の遺物。IsBadWritePtrを使う。 NtQuerySystemTime - GetSystemTimeAsFileTimeを使う。 RtlLocalTimeToSystemTime - LocalFileTimeToFileTimeを使う。
FD_ISSETってマクロじゃないやん
DrawText関数で文字列を自動改行する場合に 改行される部分のポインタを取得したいのですが よい方法はないでしょうか? DrawText関数は描画した高さを返すので困っています。
sageてしまった (--;;
>>517 BSD socketでどうなのかは知らないけどWinsockではマクロだよ
winsock.h見てみ
リストビューの背景にBMP画像を表示するのってどうやるんですか?
リストビューのWM_ERASEBKGNDを奪う
>>518 よくわからんがGetCurrentPositionExでも試してみたら
524 :
デフォルトの名無しさん :02/09/01 15:57
WINDOWCLASSEX 最後の3文字良いね。
×WINDOWCLASSEX ○WNDCLASSEX じゃなかったっけ?
526 :
デフォルトの名無しさん :02/09/01 21:44
Win9x環境で、ExitWindowsExに EWX_FORCEIFHUNG のフラグつけたらどうなるんでしょうか? 想像では EWX_FORCEフラグに置き換えられるのではないかと思います。 確認できる手段がなくて困っているのですが、 ご存知の方、教えてもらえませんか?
ExitWindowsEx 最後の3文字良いね。
>527 なんでこのタイミングで書き込んでしまったのか 自問自答。。
Exで終わるAPIはDowntownDXみたいでイヤ。
>>530 COMポートになりすまさない内蔵ISDNとか使うとRASDT_Isdnになるよ
532 :
デフォルトの名無しさん :02/09/02 12:45
文法的な問題で詰まってるのですが、 これはどう解釈したらいいのでしょうか? int test() { return ::GetLastError() != ERROR_SUCCESS; } ::GetLastError() != ERROR_SUCCESS;が 真なら1を返し、そうでなければ0を返すというだけのものでしょうか? test()がintの戻り値を返すようにサンプルではなっているので 気になっています。 intなのに1 or 0しか返さないのでしょうか? それともなんらかの場合、GetLastError()の値を返したりしますか?
>>532 MSDNの「return」見てみな。
ちなみに「真なら1」とは限らない。
>ちなみに「真なら1」とは限らない。 条件演算子は真なら1、偽なら0を返す。 これは言語で規定されている。 スレ違いだけどな。
>intなのに1 or 0しか返さないのでしょうか? それをいったら BOOL 自体 int だしな windef.h 見てみ
>533 見てみましたが、特にこの問題と関係ないように思えたのですが。。 >535 それはわかってますが、 0 or 1しか返さない仕様の関数に int型の戻り値を要求するのがおかしいな、と思いまして。 0 or 1ならBOOL型で十分じゃないかと。 >534 つまり GetLastError() != ERROR_SUCCESS の条件式が先に 0 or 1に評価され、 それがreturn 0 or 1に なるという流れでよろしいでしょうか? つまり、 GetLastError() != ERROR_SUCCESS は条件式なので、0or1の値しかなりえないと。 あってます?
>>535 bool型ならじゃなくて、条件演算子ならってかいてあるじゃん
まぁ、規定されてるのはC++だけだが。
答え:そのソースはCで書かれている。
C++ならbool型のtrue/falseになって Cならint型の1/0になる。 BOOLは単にintをtypedefしたもの。 で、API関係の解説はCでも使えるように大抵Cで書いてあるんじゃないのかな。
540 :
デフォルトの名無しさん :02/09/02 20:29
くだらないかもしれないけど、質問です。 あるウインドウハンドルの 親ウインドウのハンドルを取得するAPIってありますでしょうか? 良かったら教えてください。
541 :
デフォルトの名無しさん :02/09/02 20:30
なんか日本語おかしくてすみません。 あるウインドウの親ウインドウのハンドルを そのウインドウのハンドルから取得できるようなAPIは無いでしょうか ですね。 よろしくお願いします。
543 :
デフォルトの名無しさん :02/09/02 20:39
これはまた・・そのまんまな名前ですね ありがとうございました。
Octal 3State Buffer君よ、探し方を聞いた方がいいと思うぞ
545 :
bloom :02/09/02 21:34
546 :
デフォルトの名無しさん :02/09/03 16:20
「プラットフォーム SDK: デバッグ / エラーに関する処理」 にある APIについてなんですが、 >対応情報 > Windows NT/2000:Windows NT 3.1 以降 > Windows 95/98:Windows 95 以降。Windows 95 用の再配布可能なファイルとして利用可能。 > Windows CE:対応していません 「再配布可能なファイルとして利用可能」とは、どういうことですか?? この APIをコールする実行ファイルを、一般に配布して良いということですか?
>>546 IE5に含まれるとか、そんな意味だろ。この場合、IE5は再配布可能だから、Win95
でも利用可能ということになる。
よく、対応情報の回りを読んでみそ。
>>547 MakeSureDirectoryPathExistsとか。
...って、MSDN英語版では、どう記載されてるのかと思って見てみたら
>Requirements
> Windows NT/2000/XP: Included in Windows 2000 and later.
> Redistributable: Requires DbgHelp.dll 5.0 or later on Windows NT 4.0 and Windows 95/98/Me.
こういうことか。すなわち、DbgHelp.dllが必要で、この DLLを再配布して良いと。
550 :
デフォルトの名無しさん :02/09/03 21:56
NT4/98で SHCreateShellFolderView(Ex) 相当の処理は自前でIShellView書く以外に無いのでしょうか?
>>550 あれは「2000/XP上で」Microsoftのミドルウェアが使っているAPIを
公開した、という名目なのでそれ以前でもひそかに使える可能性はある。
でもIE5が必要とか。
NtCreateFileでファイルの初期サイズを指定すると 連続したクラスタに割り当てられる可能性が高くなったりしますか?
553 :
YahooBB237224170.bbtec.net :02/09/05 00:46
確かこのへんのスレだったと思うが「俺ならその(実行中の)プログラムに もぐりこんで**を調べる」というようなのを読んだ記憶があるんだが, どうやればそんなことが出来るんでしょうか.
>553 んなことより、あんたの 名前欄はなんなんだ??
556 :
YahooBB237224170.bbtec.net :02/09/05 01:43
>名前欄はなんなんだ?? こっちが聞きたいよ.fusianasan としたらこれが出た.(今回も) もちろんプロバイダはYBBですが,板の仕様? それより実行中の別プログラムの何をフックするんですか?APIがある?
>556 皆を代表して聞くが なんで 「fusianasan」と入れる?
559 :
fusianasa :02/09/05 02:30
? なんか特別な意味がある? どっかでみて適当に書いただけだが. こんかいは fusianasa と書いてみました. window handle を入手するんですね.どうも. たぶんまた聞きますのでよろしく.
560 :
デフォルトの名無しさん :02/09/05 03:21
自分が管理してるデータがあって データの一部をリストビューで表示させてるときって データをどうやってもつんですか? 自分のデータを保持してると リストビューにも同じ内容のデータが出来て メモリがもったいない気がする
>>561 仮想リストビュー(オーナーデータ)でがんがれ。
564 :
デフォルトの名無しさん :02/09/05 09:33
SDKのファイル・フォルダセキュリティ設定に関して質問があります。 AddAccessAllowedAceEx関数を使用し継承を設定したのですが、設定したフォルダの中に新しいフォルダを作成すると「継承元なし」のフォルダが出来てしまいます。 継承元を親フォルダに設定するにはどうしたらよいでしょうか? OSはWindowsXPで、VC++のバージョンは6.0です。
565 :
デフォルトの名無しさん :02/09/05 13:40
VB質問スレとの重複ですみません。 こちらの方が適当だと思いますので、質問し直させてください。 VB6.0、Windows2000で、OpenPrinter関数でプリンタのハンドルが取れません。 ローカルプリンタだと大丈夫なのですが、\\SERVER\PRINTERといった ネットワークプリンタだと失敗してしまいます。 ネットワークプリンタの場合、方法を変える必要があるのでしょうか?
566 :
デフォルトの名無しさん :02/09/05 15:52
それぞれがウィンドウをもつオブジェクトをクラスとして扱うために、 ウィンドウプロシージャをフレンド関数としてそのクラスにもたせています。 (メンバ関数のアドレスを取るのは望ましくないですよね?) インスタンスはたくさんあるけれどもWndProcはひとつなので、 WndProcから見るとどのインスタンスに属するメッセージなのかが区別できません。 これを解決するために、CreateWindowでインスタンスポインタ(this)をWM_CREATEに 渡してSTLのmapにhWndとthisポインタを格納し、メッセージに応答するときは hWndからthisをサーチしてインスタンスを決定する、という方法をとっています。 なんだか泥臭いので、もっといい方法はないでしょうか。 こういったことはよくありそうだと思うんですけど。
>>566 他に定番の方法としては、
・SetWindowLong でhWndにthisポインタを関連付けて置いて、
WndProcでGetWindowLongで取り出し。
・サンクを使う。つまり、thisポインタを埋め込んだマシンコードを
実行中にメモリに作ってしまって、それをWndProc替わりにする。ATLとか参照。
サンクって手抜き実装だと激しくメモリ使わない? VirtualAllocの割り当て単位がページ毎だし、 サンク作る毎にメモリ確保してたら4kずつ取られてくよね
なんでVirtualAlloc使うん?
>>569 PAGE_EXECUTE属性をつけにゃならんだろうが
>570 #include <stdio.h> int main () { unsigned char *p; unsigned char x[] = { 0xB8,0x7B,0,0,0, // mov eax,123 0xC3 // ret }; p = malloc( sizeof( x ) ); memcpy( p, x, sizeof(x) ); printf("%d\n",(*((int (*)(void))&x))()); printf("%d\n",(*((int (*)(void))&p))()); } BCC32 on WinXPで実行したけど、violation出えへんかったで。
わざわざmapなんて使わなくてもSetWindowLongのがスマートですね。 サンクですが、要するにメモリにマシン語書いておいてそこに突入させる わけですよね? そいつをWndProc代わりにするってのがよくわかりませんが・・・。 何にしても最後にはWndProc呼んでやらないといけないですよね? アセンブラはPC-98時代にぶいぶい言わしたくらいで最近はとんといじってません。
>>572 > そいつをWndProc代わりにするってのがよくわかりませんが・・・。
引数の hWnd を、アセンブラコードの部分でこっそり this とすり替えるんだよ。
>>571 通るかも知れないけど、EXECUTE属性のないメモリ上でコードを実行させるのは行儀悪いだろ
つか、ATLもそうだろ(VirtualAlloc使ってない) 文句があるなら、Microsoftにいってくれ。
>>574 デフォルトで実行属性がつくから、問題ない。
そんなの処理系・環境依存だろって意見はあるかも知れんが、そもそも
VirtualAlloc とか言ってる時点で Win32 環境限定の話だしさ。
>>572 おおよそのところ
memcpy( buf,
//---------------------------------
mov dword ptr [esp+4] this
jmp WndProc - (buf + α)
を意味するコード
//---------------------------------
, size
);
SetWindowLong( GWL_WNDPROC, buf );
こんな感じにすると、第一引数としてhWndが入ってたはずの部分に
thisポインタの値が入った状態でWndProc関数に飛ぶので、
あとはテケトーに。
>デフォルトで実行属性がつくから、問題ない。 こんなことどこに書いてある?
なるほど、理解できました。 行儀悪いのは大好きなのですが、hWndとthisをすり替えるってのが ちょっとキモチワルイです。 ひとつ思ったんですが、これって誰かにサブクラス化されたらえらいことになりますね・・・。
>>579 ecxにthisを入れてjmpすれば、
少なくともvcでは正常にthisが使えるよ。
>>578 公式にドキュメント化されてるかは分からないなぁ。
ただ、俺は少なくともプロセスヒープは「read/write/execute可能」という前提で
プログラミングして(いちいち GetProcessHeap && VirtualProtect なんて
やってない)。MS が出してるコードも、そうなってるしさ。
>>579 > ひとつ思ったんですが、これって誰かにサブクラス化されたらえらいことになりますね・・・。
なんで?
質問です。 特殊キーの状態はGetKeyStateで取得できるのですが、 それ以外のキーの状態を取得するAPIはありませんか?
sageてしまいますた。
それ以外のキーもGetKeyStateで取得出来るけど・・・?
え、そうなんですか? GetKeyboardState()で特殊キーも取得できちゃったんで、 全部コレにしてしまいました。 その、GetKeyState()で、例えばzキーやxキーを取得できるとして、 速度的にはどっちが早いんですか?
安心しろ、人間がキーを打つ速度はそれよりはるかに遅い。
Sleep() と GetMessage() を、 ほぼ同時に実行したいのですが、どうしたらいいですか? いつもはPeekMessageを使ってるプログラムで暇な時にSleepしてると フリーズしたみたいになるので、その間だけGetMessageを使いたいんですが。 GetMessageを呼んだ時に送られるメッセージとかってありますか?
Sleep(0)とか
>>589 えと、ゲームを作ってて、俺マシンはK6-2の500MHzなんですよ。
んで、1フレームにイロイロ処理をしてると秒間10フレーム逝くか逝かないかで。
なんで、なるべく時間をかけたくないワケです。
>>590 電波ですか?
>GetMessageを呼んだ時に送られるメッセージとかってありますか?
これがあったら無限ループ
>>591 入力くらいスレッド分けろよ。
WM_KEYDOWNが来た時点でイベント起こしたりSwitchToFiberしたり汁。
そもそも、ループ毎に検出しなきゃならないのはジョイスティックくらいで、
キーボードなんかはイベントで十分。
>>593 アクションゲーなんですが、スレッド使うんですか? それはちょっと。
595 :
デフォルトの名無しさん :02/09/05 23:47
>>590 500mm秒ほど寝かせてPeakMessage使え。
スレッドの切り替え時間が十数mm秒だからほかへの影響もほとんどないし、
反応が悪くなることもない。
>>590 MsgWaitForMultipleObjects
>>595 500mm秒って50cm秒でしょうか?
ってどのくらいの長さですか?
50cm秒って初めて聞いたなw 500mm秒も初めて聞いたけど。
多分
>>595 は500_秒と表現したかったんだろうけど、
ホントは500マイクロ秒と言いたかったのではないと予測。
自作コントロールのサンプルみたいのありませんか? 親ウインドウにメッセージを返すのに、どの変数を どういう風に設定すれば良いのかがわからないのです。
> 親ウインドウにメッセージを返すのに 何のメッセージを返すの? 自前で処理したいメッセージなら処理してリターン、 それ以外はDefWindowProcにそのまま渡せばいいんだけど。
601 :
デフォルトの名無しさん :02/09/06 01:49
シャットダウン、ログオフなどを WM_QUERYENDSESSION で検出したのはいいのですが、 lParamがシャットダウンも再起動も 共に0になってしまいます。 見分ける方法はないでしょうか? WinXP、VC.NETです。
PeakMessage萌え
>>600 自作のエディットコントロールで、NotifyメッセージをEDIT互換にしたいとかじゃないの?
>604 見分ける方法はあるのですか? それともないのですか?
>>605 何をやりたいのか、もう少し具体的に書いてみれば? 代案が出てくるかも
知れんぞ。
>606 別スレですこし話したのですが、 ファイルを定期的にバックアップするツールを作っています。 その機能の一部に 終了時、バックアップをとる というのがあるんですが、 これを実装するためです。 別スレでは、シャットダウン時は 重い作業厳禁、といわれたのですが、 ファイルのコピーなので仕方ないかな、と思って開発進めてます。 シャットダウン時にコピーすると応答が無い、という ダイアログが出てしまいます。 ですから WM QUERYENDSESSIONでFALSEを返し システムからのシャットダウン要求を中断、 WM ENDSESSION中側でファイルの処理、 その後ExitWindowsExでシャットダウン とするように動かしたいのですが、 一度止めて、ExitWindowsExする時に、 シャットダウンならシャットダウン、 リブートならリブート、と引数を変化させる必要が あり、どうしても必要な情報と思ってます。
>>607 そんな感じって...自分でまともに説明もできんのなら
標準のEditコントロールでも使っとけ。
通知したい時点で
SendMessage(GetParent(hwnd),
WM_COMMAND,
MAKEWPARAM(GetDlgCtrlID(hwnd), EN_CHANGE),
(LPARAM)hwnd);
のような感じで呼び出せばいい。
>>608 MFCスレで、そのソリューションを提示した者だ。
if ( lParam & ENDSESSION_LOGOFF )
でちゃんと区別つけられたよ(Win2000)。
>610 すみません、毎度毎度ご迷惑おかけします。 あたりです。 そんな定数あるとは知りませんでした。 winusuer.h内のしかも ExitWindowsExの近くに #define EWX_LOGOFF 0 #define EWX_SHUTDOWN 0x00000001 #define EWX_REBOOT 0x00000002 #define EWX_FORCE 0x00000004 #define EWX_POWEROFF 0x00000008 #if(_WIN32_WINNT >= 0x0500) #define EWX_FORCEIFHUNG 0x00000010 とあり、他のも区別できそうです。 .hへ定数を調べにいくという考えは持ってませんでした。 次から気をつけたいと思います。 ありがとうございました。
>611 勘違いしてました。 これはExitWindowsExの引数に使う定数ですね。 >610さんのおっしゃられてる方法だと、 確かにログオフは検出されますが、 シャットダウンか再起動かは判別できないようです。 簡易的にはWM_QUERYENDSESSIONの lParamが1か0かで同じ判断ができるようです。 喜びのあまり、てっきり EWX_SHUTDOWNをENDSESSION_SHUTDOWNと 勘違いしていたようです、すみません。 ENDSESSION_LOGOFFもあるならと ENDSESSION_SHUTDOWN なども探してみましたがどうやらログオフしかないようです。 シャットダウンと再起動を見分けることはできないのでしょうか?
WIN32アプリをWM_CLOSEにより終了させる際に受け取るメッセージって WM_CLOSE -> WM_DESTROY -> WM_QUIT の順番でいいんでしょうか? WM_DESTROYでオブジェクトの解法とかしてるんですけど なんかの解法忘れがあるっぽくて、終了後CPU占有率が70%くらいになってしまう...
>>612 シャットダウンか再起動かの判別...オラは、わがんね。
メッセージの拾い忘れでした はずかちー・・・
WM_DESTROYの後にWM_NCDESTROYが来るよ・・・(ぼそっ)
と思ったらOSがイカレてるだけでした・・・ イカレたOSでコンパイルしたexeって やっぱイカレてるのかな
618 :
デフォルトの名無しさん :02/09/06 22:13
自分自身のウインドウハンドルを取得するいい方法はないっすか? GetForegroundWindow を使えば、取得できないことはないですが ちょっと違うんです。 あとは、GetDesktopWindow から下がっていくぐらいしかわからなかったっす。 関数の引数に与えてやれる情報は、何もないっす。 具体的には、DLL からその呼び出されているウインドウのハンドル を取得したいのです。 DLLに直接ウィンドウハンドルを渡してやるとかは、ナシっす。 それをやりたくないのでありまして・・・。
自分自身ってなに? WndProcの第一引数にハンドルが入ってくるが
http://www.torikyo.ed.jp/torie-h/ これは、田舎のひなびた小さな学校のHPを100万ヒットの
人気HPにしてあげようという運動です。現在のターゲット校は上記です。
多くの皆さんクリックしてあげて下さい。
HPに飛んだら、2,3回更新していただくと、もっとありがたいです。
どんどんコピペして他の板にまいてください。
621 :
bloom :02/09/06 22:32
>>618 どのウインドウのWindowProc中か知りたいということ?
スタックをさかのぼるしか方法ないと思うが
自分自身ってのがわかりにくかったっすね。すまんす。 実行しているプログラム=プロセスのことで、あってるのかな。 具体的にいいますと、a.exe ってのが、x.dll を使ってるとします。 このとき、a.exeが、自分自身ってことです。 そして、やりたいことというのは、x.dll からa.exe のウィンドウハンドルを 取得したいのです。 もしかして、DllMainの第一引数でOK??? もうちょっと調べてみます〜。
>>623 一つのプロセスは複数のウインドウを所有できることを忘れてないか?
1プロセス1ウィンドウではない。 まずこれを理解しよう。 コマンドラインで使うようなプログラムはウインドウを持たないし、 Exploror等は1プロセスでいくつものウインドウを持ってる。
>>623 まぁ、プロセスが持つウィンドウを全部調べたいと仮定して、EnumWindows & GetWindowThreadProcessId が妥当なところだろう。
DllMainの第一引数を使って、やってやるとやりたいことが なんとかできあたみたいです。 アドバイス役にたちました。どもッス。
だれもDllMainの第一引数なんて言ってないと思うが
ツールバーを作成して、ビットマップがボタンに張り付いてくれたのはいいんですが、 これってシステムの背景色で透過させることはできないのでしょうか? システム背景色は設定で変えられるので、ビットマップの周辺に灰色を塗っただけじゃ 浮いてしまう可能性がありますし、ダサいので・・・。 それと、メディアプレーヤ6.4のツールバーのようにツールバーを下の方に移動したいのですが、 SetWindowPosを受け付けてくれません。完全に下にへばりつかせるか、上にへばりつかせるかしか できないようです。これもなんとかならないでしょうか。
age
>>629 「bitblt 透過」でgoogleしる。
>>631 マスクを生成して自前で透過処理を行え、ということでしょうか?
0番目のパレットの色が透過になるんじゃないの
すんません、フォトショップがはき出したbmpがダメダメでした・・・。
プリンタに LintTo() で線を引くとえらく汚いのですが、 これは漏れのプリンタ(MJ-900C)がボロいからでしょうか?
CreateWindowの最後の引数はなに?
例外c0000026Hってなに? 3回も出やがった
>637 何を聞きたいのかよくわかりません。 検索エンジンにでも聞いてください。
一応補足しとくと、Window開いてDirectX作るだけのWIN32アプリ Cライクにベタ打ちしてる間は動いてたけど DirectXの初期化とかをまとめてクラス化してったら出るようになった んだけど、なぜか初期化の前で出る わけわかめ
コード出せ
642 :
デフォルトの名無しさん :02/09/07 03:03
【 SetFilePointer 】 >For example, to move in the range from 2 gigabytes to 4 gigabytes set >the contents of lpDistanceToMoveHigh to zero, or ・・・ ^^^^^^ なんで 0 なんですか?1なら納得なんですが... nSize = (nSizeHigh * (MAXDWORD+1)) + nSizeLow ですよね???
>>642 SetFilePointerのリファレンスは読んでないけど、それを見る限り間違ってないように思うけど?
2G〜4Gなら、32ビットに収まる範囲だろ?上位DWORDはゼロでいいんじゃないの?
4G〜8Gが、上位DWORD=1になるんじゃない?
符号拡張だから。 サンプル通りLARGE_INTEGER使えって事だ
>>643 DWORD SetFilePointer(
HANDLE hFile, // ファイルのハンドル
LONG lDistanceToMove, // ポインタを移動するべきバイト数(下位32ビット)
PLONG lpDistanceToMoveHigh, // ポインタを移動するべきバイト数(上位32ビット)
DWORD dwMoveMethod // 開始点
);
確かにそうなんですが、下位32ビット lDistanceToMove は符号付って
書いてあるんです...もしかして、lpDistanceToMoveHigh が
Non-NULLのときは、lDistanceToMoveは符号無しとして扱われるのかな?
//実験すればすぐ分かりそうなもんですが...
今カキコしてる環境では実験できないもんで(;´Д`)
> もしかして、lpDistanceToMoveHigh が > Non-NULLのときは、lDistanceToMoveは符号無しとして扱われるのかな? そりゃそうでしょ。両方が符号ビット持ってどうするのよ。
>>645 644じゃないけど
32ビットで符号つきならMSBと31ビットだけど
64ビットなら符号を上位32ビットに移せば下位32ビットの
MSBは符号を示す必要がなくなるじゃん。
下位32ビットで4GBまで表現できるわけでしょ。
649 :
デフォルトの名無しさん :02/09/07 03:34
CreateWindow(....... LPARAM lParam) この最後の引数はなににつかうの?
>>649 ウィンドウプロシージャに WM_CREATE が送られるとき、その lParam に渡すために使われます。
>>649 MSDN参照。
ウィンドウを生成したときに WM_CREAT メッセージが
WinProcに飛んでくるがそのときに lParam 値に設定される。
使い方はお好きなようにどうぞ。
さっきからかぶってますな。ネマツ。
>647-648 こんな夜更けにどうも。勉強になりますた。 >For example, to move in the range from [0] to 4 gigabytes set >the contents of lpDistanceToMoveHigh to zero, or ・・・ こう書いてくれれば...
>>653 from 2 to 4 で問題ない。その少し前から文脈をよく読め。
自己レス
>>636 ひょっとして
CreatePen(PS_SOLID, 0, RGB(204, 204, 204))
とかで作ったペンで線書いても綺麗に出ないんでしょうか?
MSDN にそれっぽいことが。。。
中間色の直線を綺麗に出す方法どなたか教えてください。
>>655 画面の色数がハイカラーやフルカラーなら普通に問題なく出るよ。
256色の場合はパレットを操らないとだめ・・・
って、プリンタか。意味不明のレスしたね。ごめ。
>>655 カラープリンタで1ドットの太さの線を描いてもディザリングの
処理のせいで思ったよりで綺麗に出ないんじゃないの
>>655 中間色がそのまま出る、昇華型プリンタを買ってくる。
660 :
デフォルトの名無しさん :02/09/07 18:38
デスクトップやアプリ上でのマウス操作(DownやUp、ドラッグなど) それらに渡さないでを全て引き受けるような方法ありませんか?
SetWindowsHookEx の WH_MOUSE とか、どう?
>660 メッセージをフックする。 >それらに渡さないでを そんなことしたらえらいことになるぞw
>>661 フックというものですね、少し調べてみます。
>>662 >>それらに渡さないでを
>そんなことしたらえらいことになるぞw
そうなんですけどね、これができないと困るんですw
画面上でペイントみたいにお絵かきしたいんですが(お絵かきが最終目的ではありませんが・・・)
マウスのイベントをデスクトップや開いてるアプリに取られるとうまくいかないと思ったので。
デスクトップ上に落書きしたいんであれば、透明なウインドウを最大化すればいいんじゃね〜の。 #define STRICT #include<windows.h> LRESULT CALLBACK WindowProc(HWND hWnd,UINT iMes,WPARAM wPrm,LPARAM lPrm) { switch(iMes){ case WM_DESTROY: PostQuitMessage(0); break; case WM_MOUSEMOVE: if(wPrm & MK_LBUTTON){ HDC hDC = GetDC(hWnd); if(hDC){ int y = HIWORD(lPrm); int x = LOWORD(lPrm); HBRUSH hb=SelectObject(hDC,CreateSolidBrush(RGB(255,0,0))); Ellipse(hDC,x-8,y-8,x+8,y+8); DeleteObject(SelectObject(hDC,hb)); ReleaseDC(hWnd,hDC); } } break; } return DefWindowProc(hWnd,iMes,wPrm,lPrm); } --- 続きます ---
--- 続き --- int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR CmdLine,int CmdShow) { HWND hWnd; MSG msg; WNDCLASS wc; memset(&wc,0,sizeof(wc)); wc.lpfnWndProc=WindowProc; wc.hInstance=hInstance; wc.hCursor=LoadCursor(NULL,IDC_ARROW); wc.lpszClassName="Hello"; if(! RegisterClass(&wc))return 0; hWnd=CreateWindow("Hello","Hello",WS_TILEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,NULL,NULL,hInstance,0); if(! hWnd)return 0; ShowWindow(hWnd,SW_SHOWMAXIMIZED); while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);} return msg.wParam; }
>>664 なるほど、そういう手もありましたか^^;
結構お手軽な方法ですね。
667 :
デフォルトの名無しさん :02/09/07 21:23
斜め45度に傾いた細長のペンを作りたいのですが、出来ますか? LOGBRUSHでDIBペンやHATCHペンではダメでした。
> 斜め45度に傾いた細長のペン 意味不明
ペンの形ってこと? 斜め45度に傾いた直線型のペンを作りたいとか?
670 :
デフォルトの名無しさん :02/09/08 01:58
現在ソースの無い DLL を解析しているのですが、特定 DLL 内への呼び出しを 全てフックするなり、ログを取るなりできるデバッガ/ツールを御存知ないで しょうか。 # いまのところ ollydbg と言うデバッガを使っているものの、DLL 内の # エントリポイント全てにブレークポイントを設定するのは困難なので、 # もう少しいいデバッガ/ツールが欲しくなっています。
671 :
デフォルトの名無しさん :02/09/08 02:02
672 :
グローバルIPの取得方法 :02/09/08 02:31
Web上の自作CGIや確認君から読み込む方法と Ipconfigで書き出したテキストから読み込む方法と 試したのですが、あまりいい方法だと思いません。 みなさんどうしてます?
ipconfigはグローバルIP吐かないと思うが
>>673 OCNとか犀ネットの専用線なら吐く。
吐かないのはADSLでマスカレードかかってる場合。
>>673 漏れは672じゃないが、
モデム直結なら、グローバルIPを吐くんじゃないの?
当方、ルータユーザーだから分からんが。
ホスト名は環境変数から引いてそれを下のようにしてDNSを引く。 なお、ADSLのようにグローバルIPを変換しているような鯖は、 グローバルアドレスは実際の鯖のIPとは別なので、 あらかじめ外向けのホスト名を自分でセットしておく。 int setinetaddrbyname(struct sockaddr_in &addr, const char *s) { struct hostent *hp; if ((hp = gethostbyname(s)) == NULL) { // 引けない return -1; } else if (hp->h_addrtype != AF_INET) { // IPv6/NetWare? return -1; } else { addr.sin_addr.S_un.S_un_b.s_b1 = hp->h_addr_list[0][0]; addr.sin_addr.S_un.S_un_b.s_b2 = hp->h_addr_list[0][1]; addr.sin_addr.S_un.S_un_b.s_b3 = hp->h_addr_list[0][2]; addr.sin_addr.S_un.S_un_b.s_b4 = hp->h_addr_list[0][3]; return 0; } }
677 :
使えねーPaintDesktop :02/09/08 03:41
表示中のDesktop画像を取得したいのですが,PaintDeskTopでは ActivDesktop のときに取れません. 方法はあります?
678 :
使えねーPaintDesktop :02/09/08 03:50
↑あ,デスクトップの背景です.アイコンやウィンドウのない原画です.
>>673 そうなんですよねぇ
うちはADSLモデム直なのでipconfigでもいいのですが
環境によって使えないのはどうかと思いまして
>>676 非常に申し訳ないのですが理解不能です^^;
676さんの書き込みをヒントになんとか頑張ってみます。
分からなかったときはまた書き込むと思いますが
そのときはよろしくお願いします。
ありがとうございましたー
680 :
デフォルトの名無しさん :02/09/08 13:26
>>668 >>669 >斜め45度に傾いた直線型のペンを作りたいとか?
そうです、ペンの形が45度傾いた物です、説明不足でした。
LineToで線を引いたときに、傾きと同じ角度の線をひくと細く、
傾きと垂直な方向に線を引くと太くなるようなペンを作りたいのです。
落書き機能を実現するためで、ペンの形を色々変えたいのですが、
丸と四角はPS_ENDCAP_ROUNDとかで実現できたのですが、斜めに傾いた
ものはつくれませんでした。
/ ←こういうやつ? ◆ 右下に引きずるとこうなって / 右上に引きずるとこうなるってやつだよな? /
682 :
デフォルトの名無しさん :02/09/08 20:02
マウスカーソルを変更するプログラムの方法について質問したいので すが、自分の作ったプログラムのウィンドウ上ではSetCursor()API を使用するだけで可能ですが、それ以外のウィンドウではウィンドウ のシステムで設定されているカーソルになってしまいます。 どなたか、自分のプログラム以外のウィンドウ上のマウスカーソルの 変更方法を知っている方はいらっしゃいませんか。
infファイル、あれ右クリックすると[インストール]と出ますよね。 で、[インストール]するとドライバが入るわけですが、 あれってどういう機構になっているんでしょうか? なにかinfファイルを処理するコマンドに食わせているのか、 シェル?にそういう機構が組み込まれているのか。 インストーラからドライバを入れたいのだけど...。 どうしたらいいのか検討つきません。 どなたかご存知の方いらっしゃいませんか?
>>679 > うちはADSLモデム直なのでipconfigでもいいのですが
> 環境によって使えないのはどうかと思いまして
それは、しょうがない。そもそもルーター経由の場合は、ルーターのグローバル
アドレスの情報はルーターにしかないから取り様が無い。
ところで、何でグローバルアドレスを知りたいの ?
ついでに、一つのマシンに複数の IP アドレスが持てることは知ってるよね ?
>>683 > なにかinfファイルを処理するコマンドに食わせているのか、
> シェル?にそういう機構が組み込まれているのか。
explorer で関連付けされてるよ。うちのマシンだと...
C:\WINNT\System32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 %1
となっている。
686 :
デフォルトの名無しさん :02/09/08 21:22
>>681 遅レスですみません。そうです、そういうペンです。APIで設定次第で
できるようなものではないですか? PS_ENDCAP_FLATというのがあったんですが
あれはペンの角度がラインの角度と勝手に垂直になってしまうのです。
ソフトからディスプレイをオフにすることはできますか? 例えば、席をはずしたいがスタンバイはしたくない場合に 使いたいと思っています。 google などで検索してもわかりませんでした。
>>686 角度から計算して線の太さを変えてみたらどうか、と思ってみるテスト。
あるいはPolygonで平行四辺形を描くとか。
>>682 > 自分のプログラム以外のウィンドウ上のマウスカーソルの変更
勝手にされたらウザいからやめれ
>689 デスクトップキャプチャソフトとか作りたいんでないかい? ドラッグで範囲指定できるような
ドラッグ中ならマウスイベントは自分のウィンドウに飛んでくるから 何も問題ないわけだが
692 :
デフォルトの名無しさん :02/09/08 23:33
>>688 あ、そっか。普通に計算して描画させればいいですね。
なるほど、ペンを使うことばっかり考えてました、
ドラッグじゃなくてクリック→クリックで範囲指定するキャプチャソフトもあるぞ。PSPとか。
マウスカーソルも変更されてるから
>>690 の言ってるような可能性もないわけではない。
694 :
デフォルトの名無しさん :02/09/09 00:14
こんばんは。どなたか教えてください・・・ マルチディスプレイ環境で、ディスプレイを指定して (たとえばセカンダリ・ディスプレイに)Windowを 作るにはどうすればいいのでしょうか・・・ たとえば1024*768のディスプレイが2つ左右に並んでいる場合、 createWindowの引数でWindowの位置を(1300,200)とかに すれば一応右側のディスプレイにWindowを作ることは出来ますが、 これだとディスプレイが上下にある場合に対応できない、等の 問題が生じてしまいます。必ずセカンダリディスプレイの中央に Windowを生成したい、というときにはどうすればいいのでしょう??
>>694 EnumDisplayMonitors/GetMonitorInfo (98/2000以降ゆえ注意)
あたりでセカンダリディスプレイの座標系を調べて
そこにMoveするというのはどうかなあ
やったことないので実験結果プリーズ(はぁと)
>>694 EnumDisplayMonitors/GetMonitorInfo
>>695 >>696 さっそくレスありがとうございます。
また結果が出たら報告させていただきます。
>これだとディスプレイが上下にある場合に対応できない、等の >問題が生じてしまいます。必ずセカンダリディスプレイの中央に >Windowを生成したい、というときにはどうすればいいのでしょう?? ユーザが二つのモニタを左右に配置しているか上下にしているか コードで知ることはできるのだろうか? コード上では、いつも左右に配置していると仮定するとよいのでは?
>>683 infファイルの書式についてはPlatformSDKに簡単な説明があったはず。
ただ、深くまで知ろうとすればDDKが必要。
>>687 WindowMessage、SystemCommand(詳細忘れた。MSDN探せば直ぐ見つかる)
WinMain関数が呼ばれてから破棄されるまで、 第一引数のインスタンスハンドルの値が不変であることは保証されてますか? クラスのprivateメンバに組み込もうか 必要になる度に呼び出そうか悩み中
>>700 不変というのが変数(第一引数)の値のことを言ってるのか
実際のハンドルのことを言っているのかよくわからん。
ハンドルは不変だし、
変数の方もローカルな変数である以上、
自分で書き換えるような真似をしなければ不変。
ごめん言い方まずかった・・・ というか、日本語間違えました 要はOSから割り当てられたアプリケーションのハンドルが アプリケーションが終了するまで不変かどうか知りたかっただけです ありがとう
あう・・・ >702=>700 で >701へのレスでした
wsocketについて質問です。 socketで接続しデータを読み込む際 非同期で読み込みたいのですが WSAAsyncSelec を利用するのはわかりましたが、 それ以外の方法はないのでしょうか? (ウインドウを使わずにやりたい)
iocp
iocpの銭形だ
穴cかよ
スライダーを自前で描こうと思い、サブクラス化してWM_PAINTやらERASEBKGNDやらを 書き換えたんですが、つまみをぐりぐりいじったときの描画が微妙です。 こういったことを紹介しているサイトなどはありますでしょうか?
DrawText() とかで、任意の位置でワードラップしたいときは 自前でゴリゴリ書かないとダメですか?
関数はユーザの「任意」を知ることはできませんので 自分で書くしかないのでは
>>712 いや、80文字目で、とか。。。
まぁ自分でやるのは別にいいんですけど、
そういうワードラップ用コールバックが指定できる関数ありませんでしたっけ?
>>695 >>696 >>698 ご返答ありがとうございました。
> やったことないので実験結果プリーズ(はぁと)
> ユーザが二つのモニタを左右に配置しているか上下にしているか
> コードで知ることはできるのだろうか?
> コード上では、いつも左右に配置していると仮定するとよいのでは?
こんな感じでマルチモニタの情報をもらえました。
(モニターを上下に配置したときの例)
(1つ目のディスプレイについて)
仮想モニタ上の位置(rect): (0, 0, 1600, 1024)
デバイス名: \\.\Display1\Unit0
(2つ目のディスプレイについて)
仮想モニタ上の位置(rect): (0, 1024, 1024, 1792)
デバイス名: \\.\Display1\Unit1
>>714 ちなみに一つ目が1600*1024で二つ目が1024*768だった
時の例です。
ウインドウズのAPIに ソニータイマー関数はありますか?
717 :
デフォルトの名無しさん :02/09/10 09:29
WindowsXPの一部の機種で、OSに処理を返さないプログラムが 画面に描画をしつづけると、10秒後ぐらいから描画がされないく なってしまう現象があります。(内部での処理は正しく続く) これってXPになってからの仕様なのでしょうか? ちとすれ違いスマソ
> OSに処理を返さないプログラムが画面に描画をしつづけると、 OSに処理を返さないってどういう意味よ。 GetMessageやPeekMessageを呼ばないってこと? もしそうなら、WM_PAINTの処理とは他のところで 直接描画してるってこと? > 描画がされないくなってしまう現象があります。 > (内部での処理は正しく続く) 描画がされなくなるってどういう画面になるのよ。 正しく続くって、デバイスコンテキストの取得も 描画関数の戻り値も調べてみて成功しているってこと? もっと具体的に説明しよう。
>>718 舌足らずですみません。
> GetMessageやPeekMessageを呼ばないってこと?
> もしそうなら、WM_PAINTの処理とは他のところで
そうです。
InvalidateRect(hWnd, &rc, TRUE);
UpdateWindow(hWnd);
で直接WM_PAINTを呼んでいます。
他のケースではモードレスでダイアログを立ち上げて
時間のかかる処理中で進捗状況を
SetDlgItemText(hWnd, IDM_CURRENT_STATUS, sTmp);
でループ中で書き換えています。
> 描画がされなくなるってどういう画面になるのよ。
画面が真っ白になってしまいます。
> 正しく続くって、デバイスコンテキストの取得も
戻り値は調べてなかったです。
これがおかしくなってたのかな?
ちと調べてみます。
>>719 >InvalidateRect(hWnd, &rc, TRUE);
>UpdateWindow(hWnd);
ループ中にメッセージ処理しなきゃ意味ないよね?
>>720 ん〜今までだとループに処理を戻さなくても
強制的に再描画してくれたのだが。
>>719 あ、それなら俺の環境(Win98SE)も似た現象が発生するよ。
Winを起動してからかなりの時間使った後に限ってだけど、
自前の画像ビューアとかIEとかで、大きな画像を表示させると、
描画されずにクライアント領域が全部真っ白(背景色)になる。
この時、小さい画像なら描画される。
(まるでシステムリソースが残っていないような感じ)
普通のメッセージループを使って、WM_PAINTでの応答で
BeginPaint
StretchDIBits
EndPaint
としているだけなんだけどね。
API関連の戻り値は全部成功を返してくるので、
アプリケーションレベルでは異常を認識できない。
1つのマシンだけで起きるので、ビデオカード(G400)の
ドライバに関連する問題かなって思って諦めてる。
>>720 ループなど必要なし。
自スレッドのウィンドウなら、
UpdateWindowを呼んだ時にWM_PAINTが送られてくる。
719=722です。
ごめん間違った。 722=718。
>>722 あ、Win98SEでも発生するんですか。
手持ちのマシンではThinkPad X24 のXPで発生するのと
客先のマシンで発生してます。(機種は不明)
自作のXPマシンでは問題ないのでやっぱりVGAのドライバに
依存するんでしょうかね。
(ただこちらでは起動後の時間には関係なく発生しますけど)
情報ありがとうございました。
客先には仕様だと言って逃げることにします。
>>725 あとは、ハンドルの解放忘れ等によるリソースリークが
起きてないかどうかを調べてみた方がいいかもね。
727 :
デフォルトの名無しさん :02/09/10 23:21
SetWindowRgn で楕円作ったつもりが楕円の下側が直線状に欠けてしまう (メーターの表示板みたいな形)んですが,何が原因でしょうか.
使ったことないけど クライアントのサイズ←→ウィンドウのサイズの差分だけ欠けてるとか。
730 :
デフォルトの名無しさん :02/09/10 23:48
CreateWindow での設定サイズをオーバー
731 :
デフォルトの名無しさん :02/09/11 00:43
タイトルバーが無くて ウィンドウのサイズ変更もできない ただ白い四角形が表示されるだけのウィンドウって作れますか?
>>716 VAIOシリーズにだけOEM供給されています
734 :
デフォルトの名無しさん :02/09/11 01:53
質問というかなんというか・・・
http://www.users.gr.jp/ml/archive/delphi/25766.asp ここ見ると、
規約 順序 後始末
stdcall 右から左 関数
pascal 左から右 関数
cdecl 右から左 呼び出し側
と説明されてますが、
__pascalコールで呼び出す必要のあるWin32APIってありましたっけ。
一部(wsprintfなどは__cdecl)を除いて、__stdcallですよね?
windef.hを見てもPASCALは__stdcallと定義されてるし。
x86を前提とした場合は__pascalは使われないと考えて良いのでしょうか?
win16ではpascal使ってます
win32は無いかな。
MFCだけど...MSDNのCWnd::GetFocusのリファレンスにはこんな記述が残ってるぞ。 static CWnd* PASCAL GetFocus( );
ってよく読んだら、
「__pascal、__fortran、__syscall
の各呼び出し規約はサポートされなくなりました。」
と書いてある。
>>734 にあるようにPASCALはマクロだったのね。逝ってきます。
>>737 いや、ですから、そのPASCALの元定義は__stdcallになってます。
(windef.h参照)
>>737 741をよく読め。
> windef.hを見てもPASCALは__stdcallと定義されてるし。
色々ヘッダ見て回りましたが、どうやら__pascalは使われてないみたいですね。
>>738 あ、サポート外ってことでしたか。
これですっきりしました。
調べていただいた方々、ありがとうございまいた。
>>741 738の引用元はSDKでなくコンパイラのヘルプでしょ。
どちらにしろ使われてはいないだろうが。
>>742 いえいえ。こちらこそ、
> 逝ってきます。
って書かれた後に追い打ちを掛けてしまってすみません。
745 :
◆BkH732nY :02/09/11 10:15
TCP/IPで、構造体の送受信はどうやればいいのですか? サンプル等あったら教えて下さい。
>>745 構造体もなにもバイナリで渡すだけだと思うのだが。
747 :
デフォルトの名無しさん :02/09/11 15:13
WinAPIでメールを送信する場合、一番楽なのはどれですか? やはりMAPIでしょうか?数行でできないでしょうか?
>>747 つーかそんな変なの使わずともsocketで数〜十数行だと思うが。
とりあえず「socket smtp」で検索すれば沢山出てくるよ。
750 :
デフォルトの名無しさん :02/09/11 15:36
休止状態をサポートしてるかどうか調べるAPIおしえてくださいまし。
751 :
デフォルトの名無しさん :02/09/11 15:40
smtpを持ってくるってなんだ? あと、数〜十数は言い過ぎ。 確かに、送信部分だけならそうなるけど、 q-printとかbase64エンコードも事実上必須だし。
>>752 送信だけならbase64だけでいい
あと必要なのはShift-JISからJISの処理だね
しかしbase64もShift-JIS->JISもSMTPとは関係ない
MIMEとSMTPをごっちゃにしないほうがいいよ
>事実上必須 読めないのか?
nkf使えばいいじゃん
ShellExecute(0,0,"mailto:
[email protected] ?subject=test&body=aborn_me",0,0,SW_SHOWNORMAL);
送信ボタンは手で押せ。
>>746 敢えて言えば、バイトオーダーや型のサイズの違い(time_t が 32bit か 64bit か)
に気をつけよう、ってとこかね。
758 :
デフォルトの名無しさん :02/09/11 21:47
スレッドを使うLIBをDLLから間接的に呼び出しているのですが、 クライアントが終了すると、LIBのスレッドがクリーンナップを 経ずに強制終了してしまいます。 クライアント ==> DLL ==> LIB DLL in LIB in クライアント in クライアント out <<-- ここでLIBのスレッドが強制終了 LIB out DLL out スレッドを使っているLIBを安全にDLLから呼び出す方法はありますか? もう一つ、クライアントでMFCを使っていると、LIBで確保しているメモリの 誤リーク検出をして、非常に鬱陶しいので、こっちもお願いします。
>>753 送信だけならMIME/base64自体不要だと思うが
dllmainのPROCESS_DETACHでLIBのスレッド終了を 待てばいいのでわ?
まじでおせーてください。
送信だけ派: 送信前にすべてのデータは整っている mimeも必要派: >一番楽なのはどれですか? こんな事を言っている奴が下準備を済ませているとは考えられない
ピリオドのエスケープを忘れて、 メールが切れるとサーバー設置した会社に苦情をつけるな、たぶん。
ESMTPでSJIS直接送るのと、 SMTPでUTF-7で送るのはどちらが 罪深い行為でしょうか?笑い、
>>760 PROCESS_DETACHの前にLIB内のスレッドが閉じられてしまうんです。
スレッドのメッセージキューにも、何の通知もないし、お手上げ状態です。
>>766 添付ファイルでSJIS生のテキストどころかバイナリファイルまで平気で
送られまくってるのにメール本文になるととたんに叩かれるのが
不思議でなりません。どちらもmultipartの一員なのに。
そんなの聞いた事ねー
バイナリだろうがテキストだろうが、 添付ファイルはエンコードして送ってると思うが・・・
771 :
デフォルトの名無しさん :02/09/12 10:56
起動側の acccept で取得したSOCKET にて データの頭の方だけ recv して、その内容に応じた別プロセスを生成します。 別プロセスに、起動側の SOCKET を渡したいので、以下のようにしてみました。 sock を以下のように引数にしてプロセスを起動します。 AnsiString SockName = AnsiString((unsigned int)sock); AnsiString Cmd = "HogeChildProc.exe" + " " + SockName; CreateProcess(NULL, Cmd.c_str(), NULL, NULL, true, NORMAL_PRIORITY_CLASS, NULL, NULL, &SupInf, &ProInfo); HogeChildProc側で、 以下のように引数から SOCKET socket を作成します。 unsigned int ui = (unsigned int)ParamStr(1).ToInt(); SOCKET socket = (SOCKET)ui; その後、 この socket にて recv を試みるんですが、うまくいきません。 もしかして、 呼び出し側で、一度 recv しているといまく行かないのでしょうか?
ソケットはプロセスセーフじゃないよ あと一度recvしたら受信バッファからデータは消える 消したくないならrecvの引数にMSG_PEEKを指定しる
>>771 引数に親のプロセスIDを追加して、子プロセスでDuplicateHandleしれ。
また、もしOSが9x系なら、親が明示的にハンドルを継承可能としてやる
必要がある。
>>775 数種類のナチュラルチーズを加熱溶解し、乳化剤を加えて乳化させ、
それを型に入れて作ったものがプロセスチーズです。
>>776 ありがとうございます。正常動作するようになりました。
れすthxです(^^ゞ
>>772 サイズ 10 のうち、4 だけ読み込んでも受信バッファから消えてしまうのですか?
>>773 CreateProcess の fInheritHandle を true にしてますが、
これだけではダメで、DuplicateHandleも必要ということですか?
>>778 10bytes中4bytes読んだのなら受信バッファには6bytes残る
781 :
デフォルトの名無しさん :02/09/12 17:16
シェルのアイコン(「お気に入り」など)を取得するにはどうしたら良いですか? 一応、フォルダパスを取得 → SHGetFileInfo で実現できてるんですが、 もっとストレートに取得できないかな...と。
というか、フォルダパスを取得 → SHGetFileInfo の方法では、例えば お気に入りのフォルダのアイコンを、ユーザが変えていると破綻するので...
783 :
デフォルトの名無しさん :02/09/12 18:53
API初心者です。CreateProcess関数でソースコードのわからない(自作じゃないアプリ)を制御することは できますでしょうか?
CreateProcessでソースコードの分からない(自作じゃないアプリ)を起動することはできますが?
CreateProcessを使ってソースコードの分からない(自作じゃないアプリ)を 起動して、そのソースコードの分からない(自作じゃないアプリ)を 強制終了することもできますが?
>>782 何で破綻するのかわからん。
変えていればその変えているアイコンを取得できると思うが。
>>787 書き方悪かった。desktop.iniを削除(滅多に無いかもしれないけど)していたり
すると、普通のフォルダのアイコンが取得されてしまう。
>>788 だからその場合、普通のフォルダアイコンが正しいんでないの?
790 :
デフォルトの名無しさん :02/09/12 20:50
>>784 ,785,786
ありがとうございます。
ソフトを軌道した後にプログラムから操作(例えばファイルを開くなど)を加えることはできるんでしょうか?
ファイルを開く・・・ねぇ。 コマンドライン引数を与えて起動させれば開くんじゃないの?
792 :
デフォルトの名無しさん :02/09/12 21:07
MesseageBox と Ifをつかって はい いいえのプログラヌを造りたいのですが ______ ↑ 之の名前がわかりません
>792 ガッカリだ!
795 :
デフォルトの名無しさん :02/09/12 21:24
なんていったかな?
フーン
続きです。 子プロセスで recv しようとしたら 10093 WSANOTINITIALISED WinSockシステムが初期化されていない。 って怒られたので、WSAStartup() を追加した。 すると今度は 10038 WSAENOTSOCK 指定されたソケットが無効である。 って出るし・・・ 訳わからんです(ToT) 結局、 ちゃんと SOCKET が継承されていないんだろうなぁ(´ヘ`;)ハァ 今日は帰って、頭冷やして明日やりますです。 レス下さった方、ありがとうございましたm(__)m ではでは
>>790 べつにCreateProcessしなくても逝けるぞ
メニューの動作をエミュレート(WM_COMMAND送信)するとか、
手作業の段階をWM_KEYDOWNとかkeybd_eventとかで再現するとか。
DDEやOLEオートメーションに対応してるならそれ使うとか
>>797 普通に動くが。
cl -DADDR=0 -DPORT=12345 a.c -Feserver.exe wsock32.lib
cl -DADDR=0x7f000001 -DPORT=12345 a.c -Feclient.exe wsock32.lib
cl a.c -Fechild.exe wsock32.lib
#include <winsock.h>
int main(int ac, char **av) {
SOCKET s, c; char buf[128]; struct sockaddr_in sin;
PROCESS_INFORMATION pi; STARTUPINFO si = {sizeof si};
WSADATA data; WSAStartup(MAKEWORD(1, 1), &data);
#ifdef PORT
s = socket(PF_INET, SOCK_STREAM, 0);
sin.sin_family = AF_INET; sin.sin_port = PORT;
sin.sin_addr.s_addr = htonl(ADDR);
#if !ADDR
bind(s, (struct sockaddr *)&sin, sizeof sin);
listen(s, 1);
c = accept(s, NULL, NULL);
recv(c, buf, 4, 0); printf("server: %.4s\n", buf);
sprintf(buf, "child %d", c);
CreateProcess(NULL, buf, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
WaitForSingleObject(pi.hProcess, INFINITE);
#else /* ADDR */
connect(s, (struct sockaddr *)&sin, sizeof sin);
send(s, "0123456789", 10, 0);
#endif /* ADDR */
#else /* !PORT */
recv((SOCKET)atoi(av[1]), buf, 6, 0); printf("child: %.6s\n", buf);
#endif /* !PORT */
closesocket(s); return 0;
}
仮想キーコードから、他のキーコードとは重ならない文字列を作ることはできますか? UINT uScanCode = MapVirtualKey( VK_INSERT, 0 ); GetKeyNameText( uScanCode << 16, keyname, sizeof(keyname)-1 ); とすると Ins ではなく Num 0 が得られ VK_NUMPAD0 との区別ができないのです。 他に VK_PRIOR, VK_NEXT, VK_END, VK_HOME, VK_LEFT, VK_UP, VK_RIGHT, VK_DOWN, VK_DELETE などもうまくかないようです。
uScanCode = MapVirtualKey(vk, 0); if(vk == VK_APPS || vk == VK_PRIOR || vk == VK_NEXT || vk == VK_END || vk == VK_HOME || vk == VK_LEFT || vk == VK_UP || vk == VK_RIGHT || vk == VK_DOWN || vk == VK_INSERT || vk == VK_DELETE || vk == VK_NUMLOCK) ext = 1 << 24; GetKeyNameText((uScanCode << 16) | ext, keyname, sizeof(keyname)-1);
なるほど Extended-key flag は個別対応でガシガシですか。 どうもありがとうございます。
806 :
デフォルトの名無しさん :02/09/14 00:34
VC6sp5 をコマンドラインから使っています TryEnterCriticalSection を使おうと思ったのですが、 そんな関数ないよって言われてしまいます。 MSDN を見ると winbase.h で宣言されていて kernel32.lib に入っているようなのですが、 windows.h をインクルードしていてもそんな関数ないと言われ、 シグネチャだけ書いてごまかしてコンパイルしても リンク時にちゃんと kernel32.lib を引き渡していても CCriticalSection.obj : error LNK2001: 外部シンボル ""int __cdecl TryEnterCriticalSe ction(struct _RTL_CRITICAL_SECTION *)" (?TryEnterCriticalSection@@YAHPAU_RTL_CRI TICAL_SECTION@@@Z)" は未解決です math.exe : fatal error LNK1120: 外部参照 1 が未解決です。 と言われてしまいます。 どうしてでしょうか?
Windows NT/2000:Windows NT 4.0 以降 Windows 95/98:サポートされていません。 ヘッダー:winbase.h 内で宣言 インポートライブラリ:kernel32.lib を使用 NT系であることを明示しろ。 リンクエラーはextern "C"
>>807 ありがとうございます。
#define _WIN32_WINNT 0x0500
で逝けました。
質問 Win98SEでVc6sp5を利用して 画像の印刷プログラムを書いています。 プリンタを示すDCにStretchDIBitsで 300*400程度のイメージを書き込むことには成功するのですが。 色々問題が発生します。 1 デジカメで撮影した1600*1600くらいの画像を貼り付けると失敗して表示されない。 2 そこそこのサイズを2枚はると失敗して何も表示されない。 3 困ったことにエラーが帰ってこない。 そこでプリンタDCを使わないでスクリーンから生成したメタファイルを 使って同じようにDIBを貼り付けてみたところ。 同じ症状になりました。 なにか解決方法はあるのでしょうか?
>>809 貼り付けようとしてるDIBは正しいか?
(ファイルに保存してペイントとかで開けるか?)
StretchDIBitsでディプレイに表示することができるか?
SetStretchBltModeでHALFTONEとか指定してないか?
あと、JPEGとかPNGを書き込もうとしてるけど、
ドライバが対応してない(あるいはバグがある)とか?
811 :
画像分割は避けたい。 :02/09/14 22:18
>>810 StretchDIBitsで画面表示も印刷も出来ます。
BltModeは無指定です。
データはBI_RGBのDIBで、Jpegではありません。
小さな画像なら印刷も画面表示も成功します。
ただ
300万画素程度のデジカメで撮影したデータをA4一杯に広げて印刷を
かけると失敗します。
自己レスみたいですが
画像印刷について方々を調べて廻ると、
1 印刷はStretchDIBitsを使わないと失敗する。
2 24bit無圧縮のDIBを使う事、DDBは印刷できない。
3 大きなBitmapは分割して転送する。
とあります。
多分今回の問題は転送するデータが巨大?だった為でしょう。
しかし これはあくまでプリンタードライバーを経由する
問題の為であり、印刷時に限って起こる問題と思います。
メタファイルを画面のDCから取得する場合は
その制限を受けないものと考えられますが、
実際は同じ症状になります。
うーん困った。
画像分割は処理がめんどくさすぎる。
第一成功するかどうかわからん。
外してると思うが、 そのプリンタでは GetDeviceCapsでRASTERCAPSを取ったとき、 RC_STRETCHDIBがないとか(w
>>811 719,722辺りに書かれている症状と少し似てるね。
ウインドウの上下関係をいじるにはどうすればいいでしょう?
>>814 Zオーダーのこと?
それとも、単なる座標のこと?
まぁ、どちらにしてもSetWindowPosを使う
>>813 症状は同じですね。
小さな画像は正常に動作し、大きな画像は真っ白になるが
APIは全て正常値を戻す。
こちらも原因調査中です。
新たにわかったことは
1 1024*1024以上のBitmap?の転送は失敗しやすい。
2 16BitのAPIを通過する処理はリソース制限を非常に受けやすい
現在画像分割処理で調査中・・あぁー面倒だぁ。
これで失敗したら手詰まりだぁ。
>>816 >>816 症状の切り分けとして、
単に巨大な画像を送るとコケやすいのか
拡大して、巨大にするとコケやすいのか
を判別してみたら?
SetDIBitsToDeviceとかで、等倍でデカいのを送ってみるとか
何か1行余分だけど、 単なるミスです。他意はありません。
819 :
デフォルトの名無しさん :02/09/15 17:17
他のアプリケーション内のエディットコントロールのテキストを取り出すにはどうすればいいですか? WM_GETTEXTなどはいくらSendMessageしても届いてないようです(Spy++で確認) よろ
GetWindowText は昔の時代にはそのまま通った気がする。 いまはNTの時代だからプロセス境界を真っ当に超える フック+共有メモリ(FileMappingによる)あたりが妥当か。
なぜ、COMを使わない? HRESULT GetEditText([out, retval]BSTR* pResult);
>820 ども。 共有メモリを作ってそこに吐き出させようとしているのですが メッセージ自体が届きません。 フックとおっしゃってますから、メッセージでテキストを吐かせるというアプローチ自体がちがうと言うことかな? フックって具体的に何をフックしますか? いろいろ聞いてスマソ >821 COMを全く理解してない物で・・
ウインドウを間違えているという落ちではなかろうな。
>821 それは、「他のアプリケーション」のコードに 手を出せることが条件では? 「他人のアプリケーション」でも有効なのか?
>>824 >「他人のアプリケーション」でも有効なのか?
しゅーん。すまそん。
>823 その可能性も疑ったのですがSpy++で確認したところ ターゲットに送っているハズです。 ちなみに時プロセス内に用意したエディットには正しく処理されます。 ウインドを選んでメッセージを投げる部分はプログラムになっているので 手で打ち間違えたとかそう言う可能性はなさげです
普通のエディットコントロールはCOMのインターフェイスもってないぞ
でたらめ言ったおわびに、リクターのナポレオン本(Advanced Windows)調べたよ。 結論から言うと、NT4では可能(Advanced Windowsのターゲット)。ならば、2000やXP でも可能ではなかろうか? ミソは、user32内で、WM_GETTEXTLENGTHを最初に呼び出し、共用メモリーにその長さ を割り当て、次にWM_GETTEXTを実行する(アプリケーション側はWM_GETTEXTLENGTH 呼ぶ必要はない)。ということろを考えると、823の予測が正しいと思われ。 そもそも、自プロセス内のHWNDしか取れないAPIを呼び出して、それを利用している という可能性は?
>>819 > WM_GETTEXTなどはいくらSendMessageしても届いてないようです
WM_GETTEXTは他のプロセスでも取得できますが?
830 :
デフォルトの名無しさん :02/09/15 21:13
ラジオボタンをアプリ起動時にチェックさせたいです。どうすればいい? 猫でもわかるプログラミングで紹介されてるけど、そのとおりにやってもうまくいきません。 あと、ラジオボタンのどの項目がチェックされてるかを調べるのにはどうすれば?
とりあえずいろいろ調べてみたところ時々メッセージは届くようです 10回に1回くらいはWM_GETTEXTが4バイトのテキストをコピーしてくれます でもそれらをローカルにReadProcessMemoryすると内容は'00'でした。
>830 もうちょっと詳しく書いたら? うまくいかないならどう上手くいかないのかを 書くのが礼儀と思うんだが。
833 :
画像印刷、分割失敗 :02/09/15 21:36
>>810 >>813 >>816 StretchDIBの処理を改良して
巨大Bitmapを100*100に分割して転送するように処理を修正しました。
結果
20枚?程転送すると急に何も転送しなくなり(APIはエラーを戻さない)
(つまり虫食いの画像が出来上がる。)
さらに転送するとhDCの他のデータも全て消えてしまいます。
(先に書き込んだ部分も含めて)
書き込み先のコンテキストはメタファイル、PrinterDC共に失敗でした。
考察
bitmapの転送はサイズが巨大でも、書き込む回数が多くてもダメと言うことです。
お願い!!
もうメタファイルは諦めるしかないかも。
頼むーー誰かヒントをください
834 :
デフォルトの名無しさん :02/09/15 21:42
>>832 http://www.kumei.ne.jp/c_lang/sdk/sdk_31.htm ↑ここの
Button_SetCheck(GetDlgItem(hWnd, IDC_RED), BST_CHECKED);
これで、IDC_REDがオンにセットされます。 関数では
((void)SendMessage((hwndCtl), BM_SETCHECK, (WPARAM)(int)(check), 0L));
となります。(check)のところにBST_CHECKEDまたは、BST_UNCHECKEDがきます。 これに対して、ボタンの状態を取得するには、
Button_GetCheck(hwndCtl);
関数では、
((int)(DWORD)SendMessage((hwndCtl), BM_GETCHECK, 0L, 0L));
の部分を自分のプログラムに実装したんですが、
Button_SetCheckとButton_GetCheckは定義されてないとかコンパイラ言われるし、
SendMessage使ったらコンパイルはできるけど、起動したら使ってない時と変わらないです。
助けてください
>>819 > でもそれらをローカルにReadProcessMemoryすると内容は'00'でした。
WM_GETTEXTは他のプロセスでも直接取得できますが?
ReadProcessMemoryは何のために?
>>834 > Button_SetCheckとButton_GetCheck
#include <windowsx.h>
> SendMessage使ったらコンパイルはできるけど、
> 起動したら使ってない時と変わらないです。
目的のラジオボタンのウィンドウハンドルは
間違いなく取得できてるの?
実際にはSendMessageをどのようにソースに記述したの?
>835 ホントだ・・。どうもありがとうございます。 実はゴールはエディットではなくて試しにエディットを使ってただけなので もうしばらくReadProcessMemoryなどの使い方をチェックしてみます。 (たぶんこの方法でもうまくいくはずだしこれで動かせないと困る……)
838 :
デフォルトの名無しさん :02/09/15 22:27
>>836 BOOL CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg) {
case WM_INITDIALOG:
((void)SendMessage(hDlg, BM_SETCHECK, (WPARAM)(int)BST_CHECKED, 0L));
break;
以下省略
839 :
デフォルトの名無しさん :02/09/15 22:32
ダイアログベースのアプリケーション作ってるんだけど・・・ 右上のバッテン押したら終了するようにするにはどうすればいいですか?
>>838 ダイアログウィンドウに送信してどうすんのよ?
というか上に書いた回答をもっとよく読め。
SendMessage(GetDlgItem(hDlg, コントロールID),
BM_SETCHECK, BST_CHECKED, 0);
または
SendDlgItemMessage(hDlg, コントロールID,
BM_SETCHECK, BST_CHECKED, 0);
または
CheckDlgButton(hDlg, コントロールID, BST_CHECKED);
補足。 ラジオボタンの場合、初期化時以外は CheckRadioButtonをおすすめする。
>>839 モーダルかモードレスかで答えが変わってくる。
つーか出来てないということはモードレスかな?
843 :
デフォルトの名無しさん :02/09/15 22:54
>>843 だからモーダルとモードレスどっちなのよ?
845 :
デフォルトの名無しさん :02/09/15 23:08
>>845 WM_COMMANDで かつ LOWORD(wParam)がIDCANCELのメッセージか、
または WM_CLOSEメッセージを
捕まえて DestroyWindowすべし。
WM_COMMANDで処理したいなら、WM_CLOSEメッセージにはFALSEを返すべし。
847 :
デフォルトの名無しさん :02/09/15 23:39
LOWORD(wParam)って何をしているのでせうか? 詳細キボンヌ
>>847 それくらい、includeディレクトリの中見て自分で調べろよ。全部大文字ってことは
マクロだから、見りゃわかるだろ。
>>848 わかんねーよ。だからキーテンだろーが
何様だ、おまえ?
>849 おまえこそ知らない人に ものを教えてもらう立場にあるというのに なんだその口の利き方は? まぁいい。マジレスしてやる。 >847 >848と同じだがincludeディレクトリの中身見ればわかる。 というより右クリック定義うんたらで飛べるはず。 もし、即ヘッダ見るということを思いつかないなら まだAPIは早い。 Cでもやってるべし。
852 :
デフォルトの名無しさん :02/09/16 01:17
LOWORD() の関連質問なんですが、 DWORD a; WORD b = ( WORD ) a ; WORD c = ( WORD )( a & 0xFFFF ) ; LOWORDの define は c ですね。 で、何でわざわざ c のような変換をするのか分かりません。 bより c のような変換の方が安全(?)とかそういうのがあるんでしょか?
外してたらスマソ。今、考えたとこで検証したわけじゃないんでね。 char ch = -1; WORD c = LOWORD(ch); とやった場合であっても、c = 0xff となって欲しい。 もし、WORD b = (WORD)ch; と展開すると、b = 0xffff となる。 からじゃないかな? 識者の突っ込みキボーン。
>>852 WIN32環境ならばどちらでも変わらない(別に0xFFFFを付ける必要はない)
けど、仮にWORDが16ビットより大きいサイズの処理系が
あったとすれば、そこでは 0xFFFFが大きな意味を持つ。
ちなみに俺のVC++5.0はヘッダファイルが古いからか
#define LOWORD(l) ((WORD)(l))
と定義されてるよ。
>>853 どちらの場合も結果は 0xFFFFですが。
>>854 逝ってきます……
64bit Windows用の定義が追加されたってことなのかな?
>853-855 どうもです。 >仮にWORDが16ビットより大きいサイズの処理系があったとすれば ということで納得です。
>10回に1回くらいはWM_GETTEXTが4バイトのテキストをコピーしてくれます 4バイト…… ……ポインタのサイズ?
858 :
デフォルトの名無しさん :02/09/16 09:06
DWORDってDouble Word の略でしょ? Wordってどういう意味がある変数型なの? あと、Doubleが付くことで意味が違ってるの?
WORD ASCII文字1文字分 =1バイト=8bit DWORD ASCII文字2文字分 =2バイト=16bit
ごめん間違えた WORD ASCII文字2文字分 =2バイト=16bit DWORD WORD2個分 =4バイト=32bit
>>859 それじゃ Character だよ。
WORD は、もともとはプロセサが普通に処理できるデータの大きさ。
C 言語言うところの int と同じ概念。
MS が使いだしたのが、8086〜80286 の頃だったので、16bit になって
今日に至る。DWORD はその倍のビット幅 (=32bit)
862 :
デフォルトの名無しさん :02/09/16 10:03
IA-32では WORD =16bit(2byte) DWORD=32bit(4byte) QWORD=64bit(8byte) が慣例だね。 > WORD は、もともとはプロセサが普通に処理できるデータの大きさ。 のようにCPUにより異なるから注意しよう! ってここアセンブラのスレだったっけ?
864 :
デフォルトの名無しさん :02/09/16 11:30
>>863 プッ、そんなんでアセンブラしてるつもりになってるよ
>のようにCPUにより異なるから注意しよう! 正しくは、定義により異なる。
> アセンブラしてる ぷぷっ
SPARCなんかだとWORDは4byteが慣例だったなあ sagesage
868 :
デフォルトの名無しさん :02/09/16 13:21
Window(DC)に描画途中の画面を表示させ無いようにする、 HSPでいうredraw 0とredraw 1のような感じのAPIってありませんか?
CreateCompatibleDC CreateCompatibleBitmap etc...
やっぱし自分でバッファ確保しないと駄目ですか。 それならそれでオッケーでス。ありがとうさようなら。 もう会うことは余り無いでしょう。
871 :
デフォルトの名無しさん :02/09/16 15:11
アセンブラとアセンブリの違いにこだわっているやつほど通常の会話に変な日本語を使っているやつが多い。 マーフィーの法則 第23条の18より
(´-`).。oO(
>>871 は自分の文章が変なことに気づいているのだろうか…)
どこもおかしくねーぞ(藁 むしろ>871のは文章じゃなくて文なわけだが
>>872 マーフィー本は俺のプログラマ生活にとって欠かせない、
いわばバイブル。条項もすべて暗記した。
が、アセンブリとアセンブラの意味については
未だよくわかっていない。
>アセンブラしてるつもり ウケタ
>>873 「〜やつほど〜やつが多い」は明らかに変だが。
アセンブラー:アセンブルするひと。 アセンブリ:アセンブリ言語。言語名。 アセンブル:アセンブリ言語を機械語コードに直すこと。 ・・・と思う。
>>877 > アセンブラー:アセンブルするひと。
ふつーは処理系の方を指す。nasm とか gas とか。
.NETではアセンブリはまた違う意味が
アセンブラって、 アセンブリ言語を機械語コードに直すソフトのことだよね? 昔、「ブリをブラでブルする」と覚えた気が・・・。
882 :
デフォルトの名無しさん :02/09/16 18:34
ダイアログボックスにアイコン付けたいんだけど、どうしたらいいかな?
WM_SETICON SetClassLongでもまあできないこともない。
Win32系で64bitの変数扱いたい場合どうしたら良いですか? コンパイラはBCC5.5.1です
LONGLONG
int_64(コラ
887 :
デフォルトの名無しさん :02/09/16 22:00
LONGSHORT
どうやらBorlandC++は__int64という型のようでした ところで追加質問になってしまうんですけど printfとかで64bitの整数を文字列にする事ってできないんですか? %dだとintサイズだし、色々調べてllとか付けて見てもNGでした
>>888 > printfとかで64bitの整数を文字列にする事ってできないんですか?
使ってるライブラリによる。Borland は知らんが VC の MSVCRT.DLL だと
プリフィクス I64 だね。
GetOpenFileName でファイルの種類ごとにデフォルトの拡張子を指定するのにはどうすればよいのでしょう。 試しに lpstrDefExt = "txt\0htm\0ini\0doc\0"; みたいな感じでやってみましたが駄目でした。 フックを使って lpstrDefExt を変更するという手も考えたのですが、 フックを使うとプレースバーが表示されなくなってしまうようです。 どなたかおねがいします。
>890 無事表示できました ありがとう
>>892 ありがとうございます。
その方法で解決できました。
プロジェクトの上の方で
#define _WIN32_WINNT 0x0400
って決定がされていたので
#pragma pack( push, 1 )
typedef struct tagOFN2000 {
DWORD lStructSize;
(中略)
void * pvReserved;
DWORD dwReserved;
DWORD FlagsEx;
} OPENFILENAME2000;
#pragma pack( pop )
と途中で宣言し、
(必要ないかもしれませんが)次のように場合分けしておきました。
ofn.lStructSize = ( bWin2000MeLater ? sizeof(OPENFILENAME2000) : sizeof(OPENFILENAME) );
GetSaveFileName( (OPENFILENAME *)&ofn );
895 :
デフォルトの名無しさん :02/09/18 03:51
>>895 対象 URL
http://sakashita.strangeworld.org/source/up0768.jpg --------------------------------------------------------------------------------
mailto ストーム
アンカータグではないタグで mailto: の記述が見つかりました。
メール作成ウィンドウがたぁっくさん出てきてしまうかもしれません。
パワーのないマシンでは,ブラウザがフリーズする可能性があります。
--------------------------------------------------------------------------------
FDD アタック / concon クラッシャー等 [img タグ等]
IMG タグや JavaScript 等により file スキーマを参照します。
ブラウザの設定によってはフロッピーディスクドライブに不要なアクセスが続いたり, OS がクラッシュする可能性があります。
>>895 ム板に、しかも今時こんなブラクラ貼るなんて(・∀・)イイセンスしてるな。
898 :
デフォルトの名無しさん :02/09/18 06:24
やりかたを質問してるのでは?
899 :
デフォルトの名無しさん :02/09/18 14:05
ウィンドウプロシージャ側でコマンドライン引数を利用したいのですが グローバル変数とメッセージ、どちらで伝えるべきですか?
>>899 グローバル変数の方が楽だろうな
GetCommandLine()を使うのもありだろ
>>899 CreateWindowの引数という手もあり
GetCommandLine()ですか。 どうやらこれがよさそうですね、ありがとうございます。
PSH_WIZARD なプロパティシートで「キャンセル」ボタンを非表示にしたいのですが、 そんなことってできるのでしょうか?
>>903 GetDlgItem(IDCANCEL)でキャンセルボタンのCWnd*とれたかも
すくなくともVC5の時に普通の(ウィザードでない)プロパティシートではできた CPropertySheetの派生クラスを作ってOnInitDialog()をオーバーライドして CPropertySheet::OnInitDialog() ; CWnd *pwndCancel = GetDlgItem(IDCANCEL) ; pwndCancel->ShowWindow(SW_HIDE) ; こんな感じか(あってるかどうかしらん)
Win32Apiスレだった 904,905はMFCの場合
>>908 逝かなくてもいいよ。
十分ヒントになったはず。
>>903 キャンセルできないウィザードというのはいかがなものか。
×ボタンを押して閉じれば良し。
UIとしてあんまり、、ね。
×ボタンってあったっけ?
標準にすると右上にあると思う
盛り上げて下さってどうもありがとうございます。903でございます。 「戻る」「次へ」に対してキャンセルができないのは確かにダメダメだと思いますが、 「完了」があるなら「キャンセル」は要らないと思うのですけれども どんなもんでしょうか? んで、やっぱり GetDlgItem() しないとダメなのですかね? あんまり美しくねーなー…
>「完了」があるなら「キャンセル」は要らないと思うのですけれども 凡人には理解できません。 どういう論理ですか?
>>915 あなたの作るソフトは一生使わないと心に固く誓いますた。
>>915 は初心者板へ行ってアプリの使い方から勉強しる
919 :
デフォルトの名無しさん :02/09/19 00:36
画面のハードコピー処理のプログラム(私がプログラミングしてものではありません)で、 殆どのPCでは印刷に成功するのですが、中には印刷出来ないPCがあります。 印刷まで行かないPCの失敗箇所は、 CreateCompatibleBitmapで作ったビットマップを SelectObjectで選択するところでNULLが返却されています。 機種またはPCごとの設定で何か違いがあるのでしょうか? 私自身まだ詳しくないので、わかりづらい説明で申し訳ありません。
完了だと、指定した内容で何らかの動作が実行されてしまったり、設定内容が保存されてしまったりするじゃないですか。実際は知らないけど、少なくともイメージ的には。 それに対して、つまりキャンセルしたいんですよ。何の動作も行わせたくなかったり、設定内容を保存したくなかったり。
じゃあキャンセル封じんなよ ネタか?
支離滅裂だな。ネタ認定。
>>921-922 ネタにしたいから焦ってるのか?
どうして、920が903=915と同一人物だと
思っているのか小一時間問い詰めたい
今日の目標:誰宛のレスなのかを明確にしよう。
結論:ウィザードに限らずダイアログにはキャンセルを実装しよう。
目標:出来れば人生のキャンセル方法も議論してみよう
ごめん。漏れ勘違いしてたのかな。ウィザードって @何とかウィザードにようこそ!(戻る|次へ|キャンセル) A条件1設定(戻る|次へ|キャンセル) B条件2設定(戻る|次へ|キャンセル) C次へを押すと実行します(戻る|次へ|キャンセル) 〜ここで実行〜 D実行しますた(戻る|完了) だと思ってたけど違うの?ひょっとして @何とかウィザードにようこそ!(戻る|次へ|キャンセル) A条件1設定(戻る|次へ|キャンセル) B条件2設定(戻る|次へ|キャンセル) C完了を押すと実行します(戻る|完了|キャンセル) 〜ここで実行(ウィザード閉じる)〜 D実行しますた(メッセージボックス) だったりする?
どのウィザードをもって判断してるんだろう・・・
>>927 実行した後で戻れるプログラムって、怖いけど見てみたい。
ごめん。間違えた。眠気が。。。 前者の@とDには「戻る」はないです。 そういうのってなかったっけ?
>>932 それなら最初からそう説明しないと、ずっとキャンセルボタンが無いのかと思われるよ。
そういうウィザードはある。もしくはキャンセルボタンなどの使わないボタンを使用不可にするとか。
ファイルの非同期読み書きは どのようにすればよいのでしょうか?
CreateFile で FILE_FLAG_OVERLAPPED 付けて、 ReadFileEx, WriteFileEx使えばええんでわ?
>>931 単にIEがOSの一部だから、起動時にロードされてるんだろ
隠しAPIの10や20使ってるとは思うが・・・
>>802 亀レスでスマソ
CreateProcessするところを、別スレッドを起こして
その中でやっていたためにうまく行かなかったようです。
ソケットは、プロセスセーフではない、だけでなく、
スレッドセーフではない、ということでしょうか?
>>931 隠しAPIごときで差が出ることほとんど考えられないな。
>>933 言葉足らずでスマソン。
でも後者のスタイルが一般的なのならそっちにしようかと思います。
後学のために使わないボタンを使用不可にする方法も
一応知っておきたいのですが、やっぱ GetDlgItem() なんでしょうか。
>>937 スレッドセーフの意味がわかっているのかと小一時間・・・(略
>>919 とりあえずGetLastError()でも見てみたら
>>939 PropSheet_SetWizButtons()とか。あと MFCの CPropertySheet あたりを参考に汁!
キャンセルボタンは、ずーと表示で、「次へ」を「完了」ボタンに変えるのが標準っぽいよ。
>>942 PropSheet_SetWizButtons() ではキャンセルは非表示または無効にできないですよね。
やはり
>>927 で言う後者が標準なんでしょうね。
>>943 そんなに非表示にしたいなら、実際にやってみりゃいいのに。
::ShowWindow( ::GetDlgItem( hWizDlg , IDCANCEL ) , SW_HIDE );
でできたよ。
945 :
デフォルトの名無しさん :02/09/19 14:29
ファイルハンドルから、ファイル名って逆引きできませんか?
946 :
デフォルトの名無しさん :02/09/19 14:38
NT4.0でGetFileAttributes("NUL")を呼ぶと、FILE_ATTRIBUTE_DEVICE ビットが立っていないのですが、これはXP/2000でも同様でしょうか? NT4.0以降でファイルをオープンせずに、デバイスかどうかの判別をするには どうしたらいいのでしょうか?
>>945 CreateFileMapping -> MapViewOfFile -> GetMappedFileName
の3段攻撃で。
>>947 THX。E:\test.txt を試したら、"\Device\HarddiskVolume4\test.txt" と
返ってきて面食らいましたが。
//うーん、でも、GetMappedFileName が 9xでは使えないのか...
>>941 アドバイスありがとう。
仰る通りにエラー番号を取得してみますね。
では。
950 :
デフォルトの名無しさん :02/09/19 23:27
age
SDKでフレームを実現するにはどうすれば良いのでしょう? 因みにフレームとはウインドウを仕切るフレームのバーの事を指しています。
初めて書き込ませてもらうんですが APIでアルファブレンディングを実装するにはどうしたらいいのでしょうか? ピクセル単位でブレンドしたい画像それぞれのRGBを取得して 計算を行えばいいのでしょうか? 計算の方程式は簡単に思いつくのですが、それでは恐ろしく遅いと思うので 一応ゲームに使う予定なので、もっと早い方法はないのか……と 思っているところです。
>>951 スプリッタのこと?
完全に自分で実装するしかないよ。
WM_LBUTTONDOWNが来たときにSetCaptureして〜てな感じで。
>>952 AlphaBlend(
HDC hdcDest,
int nXOriginDest, int nYOriginDest,
int nWidthDest, int hHeightDest,
HDC hdcSrc,
int nXOriginSrc, int nYOriginSrc,
int nWidthSrc, int nHeightSrc,
BLENDFUNCTION blendFunction
);
質問です。 構造体のリファレンスが載ってる本もしくはHPってしりませんか?
>>954 お前は
今朝までに作った構造体の数をおぼえているのか?
>955 お前は今まで食べたパ(以下略
(以下略 =>ンツの数を覚えているのか?
ある大きさ(単位pt)のフォントの高さの上限というものは決まっているのでしょうか? 例えばどんなフォントでも12ptならば高さ0〜X以内におさまる、と言えるのでしょうか? 言えるのならばXの値を取得する方法を教えてください。
>>959 フォントサイズが12ptなら高さ上限は12ptだと思うが?
何の単位で取得したいんだか。
>>950 次スレは?
962 :
デフォルトの名無しさん :02/09/21 03:21
指定された文字が全角か半角かを判別するAPIありませんか?
>>962 楽をしたいのならスプリッタ専門のウインドウを作るといいよ
勿論、その分リソース消費することになるけど。
それがイヤなら実装でがんばるしかない。
そもそもプロポーショナルフォントに全角も半角もないが。
>>963 文字ってなんだよボケナス。
SJISの上位バイト判定ならIsDBCSLeadByteでも使っとけ。
>>965 ネタで言ってんのかマジで言ってんのかわからん。
>>962 役に立たないかも知れないけど、
うぷろだ用意してきたら昔つくったソース上げるよ
>>964 いい人がいるもんだな。
超低レベルな煽りしか書けないアホ共に
爪の垢を煎じて飲ませてやってくれ。
>>965 勿論固定ピッチのフォントです
>>966 文字コードとかに依存しない方法が知りたいんです。
たとえば、昔PC98であった2バイト半角文字とか、UNICODEのキャラクタとかのように、
文字列のバイト数で簡単に判別出来ない事があるので
指定のグリフの属性がhalf-widthかfull-widthか知りたいのです。
勿論、そんなAPIが無いので困っているのですが…
http://www.microsoft.com/japan/developer/windows/techart/FixedPitchFont.asp ここで明らかにされたようにXP以外の環境だと、
固定ピッチでも全角が常に半角の2倍の幅になるとは限らないので
GetCharWidth32()で得た値を信じて文字を描画していくことが出来ないのです。
今まではSJISだったので単純に(文字列のバイト数*半角文字の幅)で幅が計算
出来たのですが、UNICODE化するとそうも行かず困ってます。
>>936 例の和解で公開されたものから1つ例を挙げるとShowJavaConsoleか。
これのおかげで速くなってるとはまったくもって思えないけど
取得したいのは論理単位でです。 おなじ12ptでもフォントによってTEXTMETRICのtm.tmHeightは異なるので 上限があるのかなと思ったのですが…
>>970 ふつーGetTextExtentPoint32()で一々数えると思うが。
新スレ立てます。
>>970 Unicodeか・・・ちなみにギリシア文字(アルファとかベータとか)は全角だと思いますか?半角だと思いますか?
>>976 んなVB厨みたいなこと言うなよ。
全角に決まってるじゃん
固定ピッチフォントで確かめれば一発でわかるじゃん。
ちったー自分で試してみろよ
>>977 ぎゃはは! マヌケなDel厨発見。
コードページって知ってるか?
それ以前にUnicodeって知ってるか?
けっこう笑えたんで晒しとくね。
>977 固定ピッチのCourier Newで試してみたところ、半角ですた。
>>977 実は自分がVB厨?
( ´,_ゝ`) プッ
仲良くな。
982 :
デフォルトの名無しさん :02/09/21 17:01
> 全角に決まってるじゃん > ちったー自分で試してみろよ ( ´,_ゝ`) プッ
>>977 自分が限られた環境の中で生きていることを忘れているらしい…
977のスキルを考慮して反論を予想してみると、 V B 厨 必 死 だ な (藁 くらいが関の山だろな。 自業自得なんで同情はできんが。
>>984 「俺がやったときはそうだった」とかな。
986 :
デフォルトの名無しさん :02/09/21 17:36
CreateThreadについて質問です。 MSDNのヘルプに > C ランタイムライブラリの関数を使うスレッドは、CreateThread 関数と ExitThread 関数ではなく、 > _beginthread 関数と _endthread 関数を使うようにしてください。 と書いてあったのですが、これは何故ですか? 言われたとおり_beginthread/_endthreadを使いましたが、気になったんで…
FAQだ氏ね
ランタイムの初期化処理や終了処理が必要になるから。 ただし、すべてのランタイム関数で必要なわけではない。
>>986 ライブラリの内部変数排他処理絡みじゃないの?
_beginthreadで、排他処理用mutexの初期化とかやったりとか
考えられる。(合ってるかどうかわからないけど)
なんでライブラリのソースみないの?
例えば asctime のような関数をスレッドセーフに作るなら、スレッドごとに領域を確保しなきゃならんし、解放しなきゃならんでそ。実装の詳細は知らんけどたぶん。
きょうび 1000getなんて流行りませんな
きょうび 1000getなんて流行りませんな
きょうび 1000getなんて流行りませんな
やれば?
逝け池
1000ゲト
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。