Win32API質問箱 Build87
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/03/28(日) 10:23:58やさしいお兄さんやお姉さんたちが答えてくれるかも。
「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ!
過去スレ、関連リンクは>>2-10くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
- Win32API質問箱 wiki
http://wiki.livedoor.jp/program1/d/FrontPage
Win32API質問箱 Build86
http://pc12.2ch.net/test/read.cgi/tech/1265350980/
0449118
2010/04/26(月) 20:34:37文字サイズ=ポイント
1 pt = 0.352 778 mm
0450デフォルトの名無しさん
2010/04/26(月) 20:34:37>>448
解像度には思いっきり影響されるだろ。
高解像度だとその分全体に占める割合が小さくなるし。
別にダイアログが勝手に大きくなったりはしないぞ。
それよりも、文字サイズ基準の関係でDPIの設定が反映されるのが特徴だな。
96から120にしてやれば、大きさもそれなりに広がる。
レンダリングの関係で120にしたら文字が切れてしまうのもよくある話w
0451448
2010/04/26(月) 20:53:08だから解像度の違いにより、ダイアログの大きさが崩れることなく表示できる。
ダイアログの大きさは一定なので低解像度だと画面をはみ出して表示されないことがある。
-----
x には X座標、y には Y座標をそれぞれ
ウィンドウのクライアント座標でダイアログの左上の位置を指定します とありますが
こちらは解像度単位で、設定した値によっては始めからウインドウの端も表示されないことはあるんですか?
どの解像度でも真中に表示するには使用しているPCの解像度を取得して2で割って
SetWindowPos をすれば良いのでしょうか?
0452デフォルトの名無しさん
2010/04/26(月) 21:04:430453デフォルトの名無しさん
2010/04/26(月) 21:37:45WindowsSDKのリソースコンパイラの所に
リソーススクリプトの記述方法が全部書いてあるから。
0454デフォルトの名無しさん
2010/04/26(月) 23:13:49エロビデオ見てて良いシーンで一時停止すると
再生の→ボタンが画面の真ん中に出て来て
邪魔をする漏れのプレイヤー
0455118
2010/04/27(火) 02:26:21O
o と
。 ,. -ー冖'⌒'ー-、 思
,ノ \ う
/ ,r‐へへく⌒'¬、 ヽ キ
{ノ へ.._、 ,,/~` 〉 } ,r=-、 モ
/プ?`y'¨Y´?ヽ?}j=く /,ミ=/ ヲ
ノ /レ'>-〈_ュ`ー‐' リ,イ} 〃 / タ
/ _勺 イ;;∵r;==、、∴'∵; シ 〃 / で
,/ └' ノ \ こ¨` ノ{ー--、〃__/ あ
人__/ー┬ 个-、__,,.. ‐'´ 〃`ァーァー\ っ
. / |/ |::::::|、 〃 /:::::/ ヽ た
/ | |::::::|\、_________/' /:::::/〃
0456デフォルトの名無しさん
2010/04/27(火) 06:59:370457デフォルトの名無しさん
2010/04/27(火) 13:32:18プログラムて作成することはできますか?
ハックとかではなく、自分のTOOL上からパスワード変更をしたいと考えています。
0458デフォルトの名無しさん
2010/04/27(火) 13:52:33NetUserChangePassword()
0459118
2010/04/27(火) 23:49:220460118
2010/04/28(水) 10:34:520461デフォルトの名無しさん
2010/04/28(水) 23:36:218.3形式にしてアクセスするしかないんでしょうか?例えば
,
Andre (eの上に ' がつく文字)というファイルを
FindFirstFile(便利な変換関数("Andre"), ...)としてアクセスする手段はないですよね。
0462デフォルトの名無しさん
2010/04/29(木) 05:39:448.3形式のファイル名はどうやって得るつもりなの?
GetShortPathName()を使うならUnicode版を使わなきゃならないし、
それが出来る環境ならそもそもA系APIを使う意味がないんじゃ?
0463デフォルトの名無しさん
2010/04/29(木) 11:07:57キーボードプロシージャからDLL側のスレッドに PostThreadMessage() すると
なぜかアプリ側に WM_KEY* メッセージが素通りしてしまいます。
PostThreadMessage() で投げているのはユーザ定義メッセージなので、WM_KEY* とは全く無関係なはずだと思うのですが
何故こういうことが起こるのでしょうか?PostThreadMessage() はそういう仕様のものなんでしょうか?
キーボードプロシージャのソースを示します。
DLL側で生成したスレッドはウィンドウを持ちませんが、事前に PeekThreadMessage(&msg, 0, 0, 0, PM_NOREMOVE) を呼んでいるので
メッセージキューは生成されているはずだと思います。
--------------------
HHOOK hHook;
UINT thread_id; // DLL側で生成したスレッドのID
LRESULT CALLBACK KeyBoardProc(int code, WPARAM wp, LPARAM lp)
{
if(code < 0 || code == HC_NOREMOVE) return CallNextHookEx(hHook, code, wp, lp);
// これを行うとなぜか WM_KEY* が素通りしてしまう
// コメントアウトすると WM_KEY* は望み通り遮断される
PostThreadMessage(thread_id, WM_APP+1, wp, lp);
return TRUE; // アプリに WM_KEY* を渡さない
}
--------------------
仕様上やむを得ないのであればメッセージキューに相当するものを自作しようかと考えているのですが
標準のメッセージキューで可能ならそれに越したことはないので、詳しい方の知恵をお借りしたいです。
0464デフォルトの名無しさん
2010/04/29(木) 11:14:38PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE) の誤りです。すみません。
0465デフォルトの名無しさん
2010/04/29(木) 12:11:37いちいち取得しなくても、ソースを書く段階で「最初から知っていた」というケースもある
汎用性はなくなるけど特定の業務に使うアプリなら決め打ちで問題ないこともある
0466118 ◆ayPjxbmM2c
2010/04/29(木) 12:22:36じゃ、直接指定しろよ。
0467デフォルトの名無しさん
2010/04/29(木) 18:32:540468118
2010/04/29(木) 19:16:56int * p = &i;//int型ポインタpにiのアドレスを代入する
簡単。
char str1[] = "abcde";
char * str2 = "abcde";
上と下は同じでどっちを使ってもいい。
0469デフォルトの名無しさん
2010/04/29(木) 19:34:330470デフォルトの名無しさん
2010/04/29(木) 20:09:32気になってしょうがない。どこかの誤爆?
0471デフォルトの名無しさん
2010/04/29(木) 21:30:310472デフォルトの名無しさん
2010/04/30(金) 00:28:310473118
2010/04/30(金) 02:24:22偽の118 トリップ全部、sage
>>468>>459>>378>>370
>>300>>240>>186
>>176>>149>>190
0474118
2010/04/30(金) 03:01:530475118
2010/04/30(金) 09:58:590476118
2010/04/30(金) 10:05:060477118
2010/04/30(金) 10:57:540478デフォルトの名無しさん
2010/04/30(金) 12:16:25指定したハンドルのではなくて、IME自体の状態を取得したいのですが
0479デフォルトの名無しさん
2010/04/30(金) 12:46:28IMEってやっかいだよな
下手に関わるとwineでまともに動かなくなるし
0480デフォルトの名無しさん
2010/04/30(金) 12:48:47WM_IME_〜メッセージとかでどうですかね?
0481デフォルトの名無しさん
2010/04/30(金) 12:49:520482デフォルトの名無しさん
2010/04/30(金) 12:50:390483デフォルトの名無しさん
2010/04/30(金) 15:04:41・・・本当に書かれてたら笑うが
0484デフォルトの名無しさん
2010/04/30(金) 17:20:460485デフォルトの名無しさん
2010/04/30(金) 18:42:03IMEの状態ってウィンドウごとに保持されてるんじゃないの?
0486デフォルトの名無しさん
2010/04/30(金) 21:42:26復帰したときにATOKはおかしくなることがある。
MS-IMEも昔はおかしくなったんだけど、最近になってようやくきちんと復帰するようになった。
0487デフォルトの名無しさん
2010/05/01(土) 02:16:390488デフォルトの名無しさん
2010/05/01(土) 11:40:28もう片方がクリックされたら、クリックされたマウス上に表示するようにしてる
それで、ウィンドウは両方ともダブルクリックに対応してるんだけど
片方がダブルクリックされると、最初のクリックでもう片方が表示、その結果WM_LDBLCLKが来ないんだが
綺麗な解決方法無いかな?
0489デフォルトの名無しさん
2010/05/01(土) 11:52:200490デフォルトの名無しさん
2010/05/01(土) 14:38:20�d。遅延なら何とかなりそう
0491デフォルトの名無しさん
2010/05/01(土) 15:53:08試してみたけど、普通にWM_LBUTTONDBLCLKきたよ?
非表示のウインドウを表示させるコードに問題があるんじゃないの?
表示させるときにSWP_NOACTIVATEとか、SW_SHOWNA使ってる?
0492デフォルトの名無しさん
2010/05/01(土) 19:59:55うぉぉぉ。有難う!
普通にSW_SHOW使ってました
0493デフォルトの名無しさん
2010/05/01(土) 23:44:22GetClientRect
GetWindowRect
の違いがわかりません。
どれも、領域の左上、右下の座標を取得することができるようですが・・・
どう違うんでしょうか?
0494デフォルトの名無しさん
2010/05/01(土) 23:46:030495デフォルトの名無しさん
2010/05/02(日) 00:11:330496デフォルトの名無しさん
2010/05/02(日) 00:17:320497118 ◆ayPjxbmM2c
2010/05/02(日) 00:17:530498デフォルトの名無しさん
2010/05/02(日) 00:25:430499デフォルトの名無しさん
2010/05/02(日) 00:27:500500デフォルトの名無しさん
2010/05/02(日) 00:30:03GetClientRect - クライアント領域の位置情報
GetWindowRect - ウィンドウ領域の位置情報
0501デフォルトの名無しさん
2010/05/02(日) 01:52:03GetClientRect - クライアント上に描画している矩形を取得
GetWindowRect - ウィンドウ上に描画している矩形を取得
0502118
2010/05/02(日) 03:17:580503118
2010/05/02(日) 08:58:190504デフォルトの名無しさん
2010/05/02(日) 10:14:26Aは常に最前面、しかしBは更にAより最前面って出来ない?
0505デフォルトの名無しさん
2010/05/02(日) 10:16:200506118 ◆ayPjxbmM2c
2010/05/02(日) 10:44:320507デフォルトの名無しさん
2010/05/02(日) 11:30:060508デフォルトの名無しさん
2010/05/02(日) 12:46:070509118 ◆88ZPSwqsm6
2010/05/02(日) 12:58:180510デフォルトの名無しさん
2010/05/02(日) 13:09:460511デフォルトの名無しさん
2010/05/02(日) 13:11:19オーナーにせずに解決策ってある?
0512デフォルトの名無しさん
2010/05/02(日) 13:22:24アプリのメッセージボックスの自己主張が激しかった
Win95/NT4.0時代の悪夢を繰り返さないための仕様。
0513デフォルトの名無しさん
2010/05/02(日) 13:26:59適当なイベント(Activateなど)をトリガに
毎回EnumでZオーダーをチェックし
BがAの背面に回っていたら
A、Bの順にTopmostする
0514デフォルトの名無しさん
2010/05/03(月) 03:38:490515デフォルトの名無しさん
2010/05/03(月) 03:42:03DrawCube みたいな関数をイメージしてるなら、そんな物は無い
0516118
2010/05/03(月) 04:19:423D->2D変換
typedef struct type3d {
float x,y,z;
} POINT3D;
typedef struct type2d {
float x,y;
}
void convert3dto2d(p3 *POINT3D, p2 *POINT2D)
{
float vp = 0.7;
p2->x = p3->x * (vp / p3->z);
p2->y = p3->y * (vp / p3->z );
}
0517デフォルトの名無しさん
2010/05/03(月) 04:56:57何言語?
糞いい加減なレスすんなや、ボケ
0518デフォルトの名無しさん
2010/05/03(月) 05:10:26滅茶苦茶過ぎてワロタ
0519デフォルトの名無しさん
2010/05/03(月) 10:31:17どうやるかというとHPが100以下になったら回復アイテムを
自動で使うというものを作りたいです
そこで、起動しているexeのメモリの内容を参照するAPIって
何があるのでしょうか?
0520デフォルトの名無しさん
2010/05/03(月) 10:39:310521118 ◆1oKmZSIAF.
2010/05/03(月) 10:43:460522デフォルトの名無しさん
2010/05/03(月) 11:35:11元からかw
0523デフォルトの名無しさん
2010/05/03(月) 12:59:13\/ ● 、_ `ヽ ======
/ \( ● ● |つ
| X_入__ノ ミ そんな餌で俺様が釣られクマ――
、 (_/ ノ /⌒l
/\___ノ゙_/ / =====
〈 __ノ ====
\ \_ \
\___) \ ====== (´⌒
\ ___ \__ (´⌒;;(´⌒;;
\___)___)(´;;⌒ (´⌒;; ズザザザ
0524デフォルトの名無しさん
2010/05/03(月) 18:01:45SetEnvironment() で path を新たに設定しなおして、その後 ShellExecute() を実行してみたんですが
古いパスしか見てくれないようで困っています
0525デフォルトの名無しさん
2010/05/03(月) 18:06:17環境変数を継承するオプション無かった?なかったら、CreateProcessでごにょごにょする。
0526118 ◆4BcWhWACFc
2010/05/03(月) 18:06:47もう少し具体的にやりたいことと、やってみたことを説明してみ。
0527デフォルトの名無しさん
2010/05/03(月) 19:29:35notepad.exe とか memo.txt とかのファイル名が書かれたテキストファイルを読み
適当なタイミングでそのプログラムをShellExecuteで起動する32ビットアプリを作っています
64ビット環境下で動く時に、%SystemRoot%\Sysnative を優先して実行ファイルの探索パスとして使えると、
64ビット版のアプリが起動できるのではないかと思い実装を試みていました
多分、ShellExecute のパスを変えるには、親玉の explorer.exe の環境変数を変更しないとだめで、
そこを書き換えている期間は他のアプリにも影響が出てしまうのでこの方針はまずそうです
素直に64ビット版のShellExecuteのプロセスを用意しようと思います
0528118 ◆4BcWhWACFc
2010/05/03(月) 19:35:37素直に、フルパスで起動すればいいんじゃね?
0529デフォルトの名無しさん
2010/05/03(月) 19:51:42memo.txt や a.bat のようなファイル名指定による ShellExecute でSystem32配下のアプリが呼ばれるときの挙動を変えたかったんです
0530118 ◆4BcWhWACFc
2010/05/03(月) 19:56:27必要に応じてSysnativeにパスを変えて、CreateProcessすればいいだろ?
0531デフォルトの名無しさん
2010/05/03(月) 19:58:29面倒な世の中になってきたなあ
0532118
2010/05/03(月) 20:12:45ニンテンドウ64
0533デフォルトの名無しさん
2010/05/03(月) 20:53:44これでいけそうです。ありがとうございます!
0534デフォルトの名無しさん
2010/05/04(火) 13:31:49ソースコードを同一にする方法って言うか注意事項って言うか
そういうのがまとまったサイトってないのかな。
0535デフォルトの名無しさん
2010/05/04(火) 13:36:35void* p;
int a=(int)p;
0536118 ◆tfxvx8WXZ2
2010/05/04(火) 13:42:380537デフォルトの名無しさん
2010/05/04(火) 13:45:08#error 無理です。
}
0538デフォルトの名無しさん
2010/05/04(火) 14:13:04それじゃ常にエラー出るだろw
0539デフォルトの名無しさん
2010/05/04(火) 14:21:170540デフォルトの名無しさん
2010/05/04(火) 15:44:100541デフォルトの名無しさん
2010/05/04(火) 21:26:09副次ストリームとか使ってなんとか一緒にできないものか
foo.exe(32ビット版) が起動た時OSが64ビットだったら foo64.exe を呼び出す、みたいな間抜けなやり方しか思いつかん
0542デフォルトの名無しさん
2010/05/04(火) 21:43:04PEフォーマットが複数バイナリを格納できない以上、それは無理ってもんでしょ。
0543118 ◆tfxvx8WXZ2
2010/05/04(火) 22:08:22SysInternalのツールとかは、そういう風にやってるね。
0544デフォルトの名無しさん
2010/05/04(火) 22:11:35あれって、たとえば、特定のEXEにあたっちすることまでは
わかったのですが、
そのEXEが発行するAPIとか取得できるのかな?
やりたいことは、
EXEがあり、このEXEは、Widnowsのハードウエアにかかわる
DLL(API)を使っています。
このdevice.dll に対して、どのようなAPIが発行を要求したかしらべたいのです。
0545デフォルトの名無しさん
2010/05/04(火) 22:13:030546118 ◆uKObk31oqA
2010/05/04(火) 22:16:02API呼び出しを確認したければ、API Monitorかデバッガでアタッチ、
あるいは、ラッパ生成ツールでも使うことになる。
詳細はググレ。
0547デフォルトの名無しさん
2010/05/04(火) 22:16:52昔、dependency walkerってのがあったけど、
今もあんの?
0548デフォルトの名無しさん
2010/05/04(火) 22:20:10今手元に、とある dll とそれを利用している exe があります。
この dll について、公開されている関数の中で、この exe が
今どの関数を使用しているかを知る方法はありませんか?
ご教示の程よろしくお願い致します。
こんな感じか
0549118 ◆uKObk31oqA
2010/05/04(火) 22:24:30VSには含まれなくなったけど、フリーのやつが落とせる。
■ このスレッドは過去ログ倉庫に格納されています