■過去ログ置き場に戻る■
1-
前250
次250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
Win32API質問箱 Build46
251
名前:
デフォルトの名無しさん
:2006/10/07(土) 13:00:46
>>243-243
サンクス!試してみます。結果は後ほど。
252
名前:
デフォルトの名無しさん
:2006/10/07(土) 17:05:34
くだらない質問で恐縮ですが、
現在選択されているフォントの情報を、LOGFONT 構造体に取得するにはどうすればいいのでしょうか?
コモンダイアログでフォントを選択したいのですが、
現在のフォントをデフォルトとして、CHOOSEFONT 構造体の lpLogFont メンバに与えたいのです。
よろしくお願いします。
253
名前:
デフォルトの名無しさん
:2006/10/07(土) 17:15:06
くだらな過ぎて答える気にもならんな
254
名前:
デフォルトの名無しさん
:2006/10/07(土) 17:27:09
んじゃ、お前は黙ってろカス
255
名前:
デフォルトの名無しさん
:2006/10/07(土) 18:22:03
>>252
「現在選択されている」って、どこで選択されてるんだ?
とりあえずESPでHDCから取得ということにしてココ貼っとくけど。
ttp://forums.belution.com/ja/vc/000/364/33.shtml
256
名前:
デフォルトの名無しさん
:2006/10/07(土) 18:22:15
>>252
GetObject
DCに選択されている、という意味なら先にGetCurrentObject
257
名前:
252
:2006/10/07(土) 18:37:17
>>255-256
ありがとうございます。
リストビューが使用しているフォントを取得したいです。
LOGFONT lf;
ZeroMemory(&lf, sizeof(LOGFONT));
HDC hDC = ::GetDC( /* リストビューのハンドル */ );
HFONT hCurFont = (HFONT)GetCurrentObject(hDC, OBJ_FONT);
::GetObject(hCurFont, sizeof(LOGFONT), &lf);
こんな感じでやってみましたが、
帰ってきたのは、System のサイズ 14 のフォントで、リストビューのフォントとは違っていました。
258
名前:
デフォルトの名無しさん
:2006/10/07(土) 18:44:48
>>257
WM_GETFONT
259
名前:
252
:2006/10/07(土) 18:48:57
>>258
ありがとうございます
フォントの設定を WM_SETFONT でやってんのになぜ俺は・・・orz
260
名前:
デフォルトの名無しさん
:2006/10/07(土) 21:32:50
こんばんわ
ファイルダイアログやエクスプローラーでは「画像のサムネイル表示」がありますよね。
それを自分が作ったアプリケーションに実装したいと思うのですが、
おそらくCOMのインターフェースで何かあるのではないか?と思っているのですが
実際にあるのでしょうか?
ご存知な方がいらっしゃれば助かります。
261
名前:
デフォルトの名無しさん
:2006/10/07(土) 21:56:01
>>260
どう見てもスレ違いです。
262
名前:
デフォルトの名無しさん
:2006/10/07(土) 21:57:26
IShellFolder
263
名前:
デフォルトの名無しさん
:2006/10/08(日) 12:41:34
USBに接続してるとデバイス情報が取得できると思うのですが。
たとえば、ベンダー情報とか製品情報など
その情報はどのAPIを使って取得すればいいのでしょうか?
264
名前:
デフォルトの名無しさん
:2006/10/08(日) 13:17:12
WMIとかかな?
265
名前:
デフォルトの名無しさん
:2006/10/08(日) 14:51:00
>>263
READ_PORT_UCHAR
266
名前:
567
:2006/10/08(日) 16:18:27
よぅみんな元気してたか?
267
名前:
デフォルトの名無しさん
:2006/10/08(日) 16:29:12
OSが日本語版かそうでないか判断する際、どのような手法で判断すれば良いのでしょうか。
268
名前:
デフォルトの名無しさん
:2006/10/08(日) 17:28:46
WINDOWS_WHERE_ARE_YOU_FROM
269
名前:
263
:2006/10/08(日) 17:51:57
USBに接続されたならWM_DEVICECHANGEが飛んできますから
デバイス情報がわかるのですが、
case DBT_DEVICEARRIVAL:
if (pHdr -> dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)pHdr;
元からUSBに接続されているデバイスの場合だと、WM_DEVICECHANGEが着ません。
APIから呼び出してデバイス情報を取得する方法があれば助かるのですが。
270
名前:
デフォルトの名無しさん
:2006/10/08(日) 19:54:13
>>269
PnP Configuration Manager
cfgmgr32でググってみれ。
271
名前:
デフォルトの名無しさん
:2006/10/08(日) 23:32:58
>>260
CLSID_ShellThumbnailDiskCache
IShellImageStore
Shell Image Store Object
あたりかと
272
名前:
デフォルトの名無しさん
:2006/10/09(月) 01:04:51
プロセスが動的にリンクしているDLLを調べるようなAPIってないですか?
273
名前:
デフォルトの名無しさん
:2006/10/09(月) 01:07:01
>>272
APIひとつってわけにはいかんな。
http://www.geocities.jp/i96815/windows/win09.html
http://hp.vector.co.jp/authors/VA015412/colum/pe.htm
この辺を読んで応用せよ。
274
名前:
デフォルトの名無しさん
:2006/10/09(月) 01:08:12
>>273
即レスどうもです。参考になりそうです。ありがとうございます!
275
名前:
デフォルトの名無しさん
:2006/10/09(月) 11:02:59
VB6の「DoEvents」と同じ機能を持つWinAPIはなんですか?
276
名前:
デフォルトの名無しさん
:2006/10/09(月) 11:06:58
MsgBox
277
名前:
デフォルトの名無しさん
:2006/10/09(月) 11:11:07
>>275
ありません。
278
名前:
275
:2006/10/09(月) 11:16:32
VB6で出来てWinAPIでできない事ってあるのですか?
279
名前:
デフォルトの名無しさん
:2006/10/09(月) 11:20:31
APIを用いて同等の機能を実現する事は出来ますが、同じ機能のAPIはありません。
280
名前:
デフォルトの名無しさん
:2006/10/09(月) 11:27:19
単純に置き換えれるならVBいらんわな
281
名前:
デフォルトの名無しさん
:2006/10/09(月) 11:28:08
VB諦めて、Windowsに制御を戻すAPIはありますか?
282
名前:
デフォルトの名無しさん
:2006/10/09(月) 11:30:16
Windows は何も制御しません。
283
名前:
デフォルトの名無しさん
:2006/10/09(月) 11:30:48
sleep?
284
名前:
デフォルトの名無しさん
:2006/10/09(月) 11:33:39
DoEventsでぐぐったらすぐに見つかったよ
"DoEvents PeekMessage"でぐぐってみ
285
名前:
デフォルトの名無しさん
:2006/10/09(月) 11:34:36
俺なんて一人でSEXするよ
286
名前:
デフォルトの名無しさん
:2006/10/09(月) 11:38:38
SAXか。俺は専らDOMだな。
つーか、MSXMLは使いにくくてしょうがない
287
名前:
デフォルトの名無しさん
:2006/10/09(月) 11:50:27
>>286
SchemeだとSAXの方が相性いいよ。
288
名前:
デフォルトの名無しさん
:2006/10/09(月) 12:42:31
>>275
まず、Windowsプログラムの仕組みから勉強すべし。
そうすれば、メッセージポンプを動かせばいい事が判る。
289
名前:
デフォルトの名無しさん
:2006/10/09(月) 15:26:35
ちょっとさ聞きたいんだけどさ、
C++による簡単実習3次元CG入門って本のさ、
低レベルな部分はどうやって実装されているの?
ドットを表示したりウィンドウを作成する時にさWin32Apiを
使っているようには見えないのよ。
ヘッダを見た限り。。
win.libってのも読み込んでるけど、それかなあ。
っと思ってDumpBINで調べたらそうだった。
質問する意味が無くなったから文句を言いたい。
ソースを公開しろよ。ぼけ!!小笠原祐治はケチだ。
この本の存在理由がわからない。
まあ、プログラマーにわかり易く数学を教える意味の本なのだろう。
買う価値はない。
ttp://www.morikita.co.jp/soft/84142/CG_NET.exe
290
名前:
デフォルトの名無しさん
:2006/10/09(月) 15:35:04
で?
291
名前:
デフォルトの名無しさん
:2006/10/09(月) 15:48:48
それで終わり。
292
名前:
デフォルトの名無しさん
:2006/10/09(月) 15:51:01
ふーん
で?
293
名前:
デフォルトの名無しさん
:2006/10/09(月) 15:51:56
そこからが始まり。
294
名前:
デフォルトの名無しさん
:2006/10/09(月) 16:02:01
>>289
っつーか、まあなんだ、あれだ、すれ違いだ
http://pc8.2ch.net/test/read.cgi/tech/1064681919/
295
名前:
デフォルトの名無しさん
:2006/10/09(月) 16:05:11
>>294
そうか。有難う。
向こうで書いてくるぜ
296
名前:
デフォルトの名無しさん
:2006/10/09(月) 17:28:41
DVDのセクタを読み出すのにはどうしたらいいのでしょうか。
CreateFile/ReadFileでハードディスクは読み出せたのですが、DVDは読み出せませんでした。
297
名前:
デフォルトの名無しさん
:2006/10/09(月) 18:19:56
もしかして、GENERIC_WRITEとか、GENERIC_ALLを指定してる?
298
名前:
デフォルトの名無しさん
:2006/10/09(月) 18:31:19
>>296
ASPI や SPTI 経由で SCSI MMC の READ CD コマンドを発行する必要がある.
これだけ特有の単語を満載したから後はぐぐればわかるだろ.
299
名前:
デフォルトの名無しさん
:2006/10/09(月) 19:11:30
ぐぐれって何ですか?やふったけどわかりません><
300
名前:
デフォルトの名無しさん
:2006/10/09(月) 19:31:01
>>272-274
EnumProcessModules
API一発だよ。
301
名前:
デフォルトの名無しさん
:2006/10/09(月) 20:18:34
>>299
試しにやふってみたら、普通に分かるじゃねーか。
302
名前:
:
:2006/10/09(月) 20:41:40
303
名前:
)
:2006/10/09(月) 23:51:05
304
名前:
デフォルトの名無しさん
:2006/10/10(火) 00:31:47
>>303
ちょっとワロタ
305
名前:
デフォルトの名無しさん
:2006/10/10(火) 11:44:18
>>260
GDI+のGetThumbnailImage
IExtractImage
306
名前:
デフォルトの名無しさん
:2006/10/11(水) 04:45:27
LVM_SORTITEMSEXとLVM_SORTITEMSの違いって何ですか?
ヘルプ見ると同じっぽいんですけど。
307
名前:
デフォルトの名無しさん
:2006/10/11(水) 06:16:05
SEXかどうかじゃね?
308
名前:
デフォルトの名無しさん
:2006/10/11(水) 06:33:13
クソ、不覚にも笑っちまった
309
名前:
デフォルトの名無しさん
:2006/10/11(水) 09:13:51
bitbltって一部領域外になるマイナス座標とかセットして
転送するとドライバーによっては落ちたりしますか?
それともちゃんとクリッピングしてくれてるんでしょう?
とりあえずうち環境では落ちないんですが。そもそもマイナス座標
を使っていいかも書いてないんで。。。
310
名前:
デフォルトの名無しさん
:2006/10/11(水) 09:30:18
>>306
比較関数に渡されるアイテムのパラメータが違う。
LVM_SORTITEMS : LVITEM.lParam
LVM_SORTITEMSEX : 現在のインデックス
>>307
;`;:゙;`(;゚;ж;゚; )
>>309
問題無い。
マイナス座標自体、特別扱いするものではなく、
デフォルトで、偶々負の座標領域が常にクリップされる状態になっているだけ。
SetWindowOrg等を使えば、(0,0)の位置自体動かせる。
311
名前:
309
:2006/10/11(水) 10:31:45
>>310
ありがd
312
名前:
空猫
:2006/10/11(水) 23:56:03
こんにちは♪
Windows 2000 SP4上で、
VC++6.0を使いWin32プログラムを書いています。
その中でEditコントロールを使おうとしているのですが、
フォーカスが一度他のコントロールに移ると、
いくらマウスでクリックしても
Editコントロールにフォーカスを戻すことが出来なくなってしまいます。
何故、その様なことが起こってしまうのか
SPY++でメッセージを眺めたり、
MSDNを読んだりしてみたのですが、
どうしても判らず、知恵をお貸しください(汗
プログラムのソースを張っておきます。
http://skynekosky.web.fc2.com/edit/index.html
313
名前:
デフォルトの名無しさん
:2006/10/12(木) 00:05:40
他の兄弟ウィンドウがかぶさってるとか
314
名前:
空猫
:2006/10/12(木) 00:18:57
少しづつコントロールのサイズを小さくし、
移動させて重ならない様にしみましたが、
挙動は変わりませんでした。。
また、もしや同じCreateWindowが2回実行されてしまっているのではと想い、
if ( WND_CHAT::hEditResCtrl == 0 )
WND_CHAT::hEditResCtrl = CreateWindow( ....
の様に重複して実行されないようにしてみましたが、
改善されることはありませんでした。
私は何を見落としてしまっているのでしょう。。。(汗
315
名前:
デフォルトの名無しさん
:2006/10/12(木) 01:26:49
SetWindowPosの所を以下のように直してみてくれ。
SetWindowPos(hwndCtrl, NULL, x, y, cx, cy, SWP_NOZORDER|SWP_SHOWWINDOW);
Z-ORDER周りを弄っているのが怪しい。
316
名前:
空猫
:2006/10/12(木) 01:48:32
アドバイス有難う御座います♪
仰ってくださった様に、z-order関係を変えてみたのですが、
変わらずフォーカスをEditコントロールに移すことが出来ませんでした(汗
SetWindowPos(hButtonCtrl, NULL, buttonSendRect.left, buttonSendRect.top, buttonSendRect.right-buttonSendRect.left, buttonSendRect.bottom-buttonSendRect.top, SWP_NOZORDER | SWP_SHOWWINDOW);
んぅ。。。(悩
317
名前:
デフォルトの名無しさん
:2006/10/12(木) 02:27:11
MDIなのかこれ。流石に素のWin32でMDIは組んだことが無いな……
とりあえず、MSDNで'Multiple Document Interface'を参照しながら頑張れ。
318
名前:
デフォルトの名無しさん
:2006/10/12(木) 02:38:30
俺のSDKメモ帳です
2chはこういう使い方もできるし便利だね
http://pc8.2ch.net/test/read.cgi/tech/1160580550/
319
名前:
デフォルトの名無しさん
:2006/10/12(木) 03:12:24
WS_TABSTOP
320
名前:
空猫
:2006/10/12(木) 04:07:14
>>317
このプログラムは、"MDICLIENT"や、MDICREATESTRUCTを使わないで、
MDIに似た機能を実現させているプログラム・・・でしょうか。
現在は、1種類の子ウィンドウを親フレームに表示させて居りますが、
いずれ他の機能を持つ子ウィンドウを
同一の親フレーム内に表示させたい為に、
この様な形を取ることにしました。
エディットコントロールを貼り付けるまでは順調だったのですが、
エディットコントロールだけは思うように行かずに悩んでしまい、
ここで助言を仰がせて頂いた次第です。
子ウィンドウに、
「さらに子コントロールを貼り付ける。」
という形に無理があるのでしょうか。。
321
名前:
デフォルトの名無しさん
:2006/10/12(木) 11:02:08
「子ウィンドウ フォーカス クリック」でググッタら出てきた。
仕様らしい。
ttp://support.microsoft.com/default.aspx?scid=kb;ja;230587
322
名前:
空猫
:2006/10/12(木) 16:22:33
>>321
はにゃ、、仕様なのですか。。。。
んぅ、、何故、そんな仕様が(汗
教えてくださった皆様、
ありがとうございますっ♪
323
名前:
296(299は違います)
:2006/10/13(金) 00:41:20
どうもありがとうございました。
アドバイスのおかげで一応何とかそれらしい手法に辿り着きました。
しかし、以下のようなコードで転送量(BUF_SIZE)をある値以上に大きくすると
素早く返ってきてScsiStatus=0になるのですが、
ある値以下にするとえらく遅く戻ってきてScsiStatus=2になります。
遅い場合、TimOutValueを5秒とかに設定していると
DeviceIoControl()がセマフォタイムアウトエラー(121)で失敗します。
いったい何が起こっているのでしょうか?
転送量が少ない方が遅いというのが謎です。
ちなみに「ある値」はコロコロ変わるようです。(0x92eだと思ったら0x7feになってた・・・)
それと、そもそもScsiStatusは0だとSS_PENDINGで結果が返ってこない状態だと思うのですが、
SPTIは同期的に働くのだというのでこれも不可思議です。
しかもSS_PENDINGなのにセクタデータはちゃんとバッファに入るようです。
またScsiStatus=2でもこれはSS_ABORTEDでエラーだと思うのですが、
これもセクタデータはちゃんとバッファに入るようです。
324
名前:
296
:2006/10/13(金) 00:41:52
#include <windows.h>
#include "devioctl.h"
#include "ntddscsi.h"
#include "spti.h"
main(){
HANDLE hDev;
hDev = CreateFileA("\\\\.\\E:", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if (hDev == INVALID_HANDLE_VALUE){
printf("CreateFile() failed\n");
exit(-1);
}
//#define BUF_SIZE 0xc00 //素早い
#define BUF_SIZE 0x10 //遅い
BYTE _rgbBuf[BUF_SIZE + 0x0f];
BYTE *rgbBuf = (BYTE *)(((DWORD)_rgbBuf + 0x0f) & 0xfffffff0);
memset(rgbBuf, -1, BUF_SIZE);
SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER sptdwb;
memset(&sptdwb, 0, sizeof(sptdwb));
sptdwb.sptd.Length = sizeof(SCSI_PASS_THROUGH_DIRECT);
sptdwb.sptd.CdbLength = 12;
325
名前:
296
:2006/10/13(金) 00:42:22
sptdwb.sptd.DataIn = SCSI_IOCTL_DATA_IN;
sptdwb.sptd.SenseInfoLength = 14;
sptdwb.sptd.DataTransferLength = BUF_SIZE;
sptdwb.sptd.TimeOutValue = 30;
sptdwb.sptd.DataBuffer = rgbBuf;
sptdwb.sptd.SenseInfoOffset = (BYTE *)&sptdwb.ucSenseBuf - (BYTE *)&sptdwb;
sptdwb.sptd.Cdb[0] = 0xbe; // Read CD
sptdwb.sptd.Cdb[8] = 1;
sptdwb.sptd.Cdb[9] = 0x10;
BOOL bRes;
DWORD dwResCnt;
printf("rgbBuf[0] = %02X\n", rgbBuf[0]);
bRes = DeviceIoControl(hDev, IOCTL_SCSI_PASS_THROUGH_DIRECT, &sptdwb, sizeof(sptdwb), &sptdwb, sizeof(sptdwb), &dwResCnt, NULL);
if (!bRes){
printf("DeviceIoControl() failed\n");
exit(-1);
}
printf("rgbBuf[0] = %02X\n", rgbBuf[0]);
printf("sptdwb.sptd.ScsiStatus = 0x%08X\n", sptdwb.sptd.ScsiStatus);
}
326
名前:
デフォルトの名無しさん
:2006/10/13(金) 05:13:01
ドライブに対してセクタ単位以外の転送要求を出してうまくいくほうがおかしい
327
名前:
デフォルトの名無しさん
:2006/10/13(金) 12:02:55
ファイル名を指定して実行で、ディレクトリを実行すると
("C:\Program Files" みたいな)
エクスプローラが表示されますが、
ほかのプログラムを実行することはできませんか。
APIを使ってどうにかできることではないのでしょうか。
328
名前:
デフォルトの名無しさん
:2006/10/13(金) 12:51:16
>>327
それは多分無理っぽいな
入力で
Myapp.exe C:\Program Files
見たいな事はもちろん出来るんだけど
329
名前:
デフォルトの名無しさん
:2006/10/13(金) 12:53:36
レジストリで関連付け変えればできるがAPIでは無理かもしれんな
330
名前:
デフォルトの名無しさん
:2006/10/13(金) 14:00:12
バッチファイル使えよ
331
名前:
デフォルトの名無しさん
:2006/10/13(金) 14:32:02
LineTo()で線を引きたいんですが、色を変えることって出来ないんでしょうか?
332
名前:
デフォルトの名無しさん
:2006/10/13(金) 14:36:30
>>331
:LineToのMSDN記述より
直線は現在のペンで描画されます。
ペンがジオメトリックペンである場合、現在のブラシで描画されます。
ペンの詳細については、CreatePen 関数とそれに関連する各構造体を参照してください。
:CreatePen
HPEN CreatePen(
int fnPenStyle, // ペンのスタイル
int nWidth, // ペンの幅
COLORREF crColor // ペンの色
);
333
名前:
デフォルトの名無しさん
:2006/10/13(金) 16:21:21
レジストリですか。
すれ違いぽいのでさようなら。
ありがとうございました
ノシ
334
名前:
デフォルトの名無しさん
:2006/10/13(金) 16:21:51
>>333
糞だな。もうくんなはげ
335
名前:
デフォルトの名無しさん
:2006/10/13(金) 18:22:33
勘だけで書くと
>>327
はシェルまわりのプログラミングになるのか、
ファイル名を指定して実行ダイアログのAPIかメッセージを横取りとか?
336
名前:
デフォルトの名無しさん
:2006/10/13(金) 21:55:33
エクスプローラに引数を与えて起動させるだけじゃないのか?
337
名前:
デフォルトの名無しさん
:2006/10/13(金) 23:27:57
IShellExecuteHook
338
名前:
デフォルトの名無しさん
:2006/10/14(土) 02:01:46
ウインドウプロシージャで動的に確保したポインタを
WM_DESTROYのところで解放して大丈夫ですかね?
switch文の外だから末尾で解放するのと、
どちらが正解なんでしょうか?
あ、関数ではなくnewの場合です。
339
名前:
デフォルトの名無しさん
:2006/10/14(土) 02:58:33
ソースup
もしくは日本語でおk
340
名前:
デフォルトの名無しさん
:2006/10/14(土) 03:31:20
というかWindows API関係ないだろ・・・
341
名前:
デフォルトの名無しさん
:2006/10/14(土) 05:24:19
リストビューがレポートスタイルで表示されているときに、リストビューのウィンドウハンドルから
特定のセルの値を抽出したいのですが、ウィンドウハンドルを取得した後
どうすればいいのか分かりません。
例えばx行y列のセルの値を取得した場合はどのようにすればよいのでしょうか。
よろしくお願いします。
342
名前:
341
:2006/10/14(土) 05:35:49
すいません。分かりました。
343
名前:
デフォルトの名無しさん
:2006/10/14(土) 14:51:47
>>322
> はにゃ、、仕様なのですか。。。。
> んぅ、、何故、そんな仕様が(汗
ウィンドウのフォーカスがキーボード入力の可否を示すと同様に、
ウィンドウのアクティブはマウス入力の可否を示す。
キャプション付き子ウィンドウが非アクティブならマウスは来ない。
344
名前:
デフォルトの名無しさん
:2006/10/14(土) 18:51:14
質問です
48×48なアイコンをSHGetFileInfoやExtractAssociatedIconのようにして
実行ファイル等から取得する事は可能ですか?
345
名前:
デフォルトの名無しさん
:2006/10/14(土) 18:53:00
試しにやってみて出来たら可能。
出来なかったら不可能。
346
名前:
デフォルトの名無しさん
:2006/10/14(土) 21:03:44
スレッドのサスペンドカウントを取得したい場合、
SuspendThread/ResumeThreadで実際にサスペンド/レジュームさせて、
戻り値を見るしかないのでしょうか??
347
名前:
デフォルトの名無しさん
:2006/10/14(土) 21:24:11
ボタンウィンドウ表示したとき高速で画像更新(FPS20ぐらい)
するとボタンがチラチラすのは仕様?
348
名前:
デフォルトの名無しさん
:2006/10/14(土) 22:06:51
そこでバッファリングがダブルですよ
349
名前:
デフォルトの名無しさん
:2006/10/15(日) 00:30:01
>>346
俺の知ってる限りそれしかない
350
名前:
デフォルトの名無しさん
:2006/10/15(日) 00:41:08
だな
351
名前:
デフォルトの名無しさん
:2006/10/15(日) 09:35:07
なんか、妙な質問かもしれないですが・・
ポップアップメニューから送信されるメッセージは
どのようにフックすればイイのでしょうか?
spyで見ようとしても、「指定のウインドウはスパイできません。」等と
言われ、困っております・・。
何がしたいかと言うと、右クリック -> メニューにて
表示されるコマンド(例えばプロパティとか)をフックして
キーバインドさせたいのですが。
352
名前:
デフォルトの名無しさん
:2006/10/15(日) 09:51:14
>>346
フックを仕掛けて、呼び出した回数を常に別のところに保管しておくという方法も。
353
名前:
341
:2006/10/15(日) 12:41:35
別アプリケーションのリストビューから列名を取得しようとして以下の
コードを書いているのですが、うまく取得できません。
何が足りないのでしょうか???
GetWindowThreadProcessId(hWnd, &dwProcessID);
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
dwSize = sizeof(LVCOLUMN) + 128;
plvcClient = (LVCOLUMN *)VirtualAlloc(NULL, dwSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
plvcServer = (LVCOLUMN *)VirtualAllocEx(hProcess, NULL, dwSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
plvcClient->mask = LVCF_TEXT;
plvcClient->pszText = (char *)(plvcServer + 1);
plvcClient->cchTextMax = 128;
WriteProcessMemory(hProcess, plvcServer, plvcClient, dwSize, &dwNumberOfBytes);
SendMessage(hWnd, LVM_GETCOLUMN, (WPARAM)1, (LPARAM)plvcServer);
ReadProcessMemory(hProcess, plvcServer, plvcClient, dwSize, &dwNumberOfBytes);
VirtualFreeEx(hProcess, plvcServer, dwSize, MEM_DECOMMIT | MEM_RELEASE);
VirtualFree(plvcClient, dwSize, MEM_DECOMMIT | MEM_RELEASE);
CloseHandle(hProcess);
354
名前:
デフォルトの名無しさん
:2006/10/15(日) 12:59:50
ちなみにSendMessageの戻り値はTRUEで帰ってきます。
また、widthを取得しようとするとうまく取得できています。
355
名前:
デフォルトの名無しさん
:2006/10/15(日) 14:25:37
plvcClient->pszTextの値に惑わされている予感。
356
名前:
353
:2006/10/15(日) 14:30:03
>>355
まさにその通りでした。ちゃんと取れてました。
あとVirtualFreeExとVirtualFreeのサイズに0を指定しなければ
ならないのにdwSizeを指定してしまい、解放できていませんでした。
ご迷惑おかけして申し訳ありませんでした。
357
名前:
デフォルトの名無しさん
:2006/10/15(日) 16:10:48
質問です
ファイラーのようなものを作りたいと考えているのですが、
アプリケーション外の領域に対するファイルのドラッグ&ドロップの挙動を
Windows標準のエクスプローラと同じものにする簡単な方法はありませんでしょうか。
358
名前:
デフォルトの名無しさん
:2006/10/15(日) 16:15:08
だったらエクスプローラを拡張するソフトを作れば?
既に腐るほどあるけどさ。
359
名前:
デフォルトの名無しさん
:2006/10/15(日) 16:20:44
ラッパーちゃん重いお
360
名前:
デフォルトの名無しさん
:2006/10/15(日) 16:24:13
http://gamdev.org/up/img/7841.gif
画面の描写が崩れる・・・・ どこに描写してるんだ!
最初は普通、使っているうちに。
DIB関係で問題起こしてるんかもなぁ〜
画面は常に手前にセット
361
名前:
デフォルトの名無しさん
:2006/10/15(日) 16:26:13
精神的ブラクラ注意
362
名前:
デフォルトの名無しさん
:2006/10/15(日) 16:38:43
この立体視なにが見えるか分かる方いますか?
http://www.vipper.org/vip357562.gif
363
名前:
デフォルトの名無しさん
:2006/10/15(日) 16:43:50
>>362
せめて拡張子変えとけばいいのに。。。。
364
名前:
デフォルトの名無しさん
:2006/10/15(日) 16:53:29
ここは何のスレだ?
365
名前:
デフォルトの名無しさん
:2006/10/15(日) 18:09:43
すみません、ウィンドウが表示されているかどうかを取得するにはどうしたらいいんでしょう?
設定するには ShowWindow でいいのですが、取得方法は、
GetWindowInfo、GetWindowLongPtr などを調べても見つからなかったです。
Windows XP です。
366
名前:
デフォルトの名無しさん
:2006/10/15(日) 18:14:28
俺は
if(GetWindowLong(hWnd, GWL_STYLE) & WS_VISIBLE)
でやってるが自己流なんでなんかマズいかもしれん
367
名前:
デフォルトの名無しさん
:2006/10/15(日) 18:14:36
IsWindowVisible
368
名前:
デフォルトの名無しさん
:2006/10/15(日) 18:16:59
おまえあたまいいな
369
名前:
365
:2006/10/15(日) 18:47:42
>>366-367
ありがとうございます!解決しました。
370
名前:
351
:2006/10/15(日) 20:44:48
>>351
は
なんとかならんとですか?
1件見つかったんだけど、メニューへの挿入方法で
微妙に違うし、ソース公開されてなかったし・・('A`)
#32768に、なにか送りつけても意味なさげのようで。
371
名前:
デフォルトの名無しさん
:2006/10/15(日) 21:04:02
>>370
リソースエディタで見てわからんか。
リソースとして埋め込んでない場合もあるけど。
372
名前:
デフォルトの名無しさん
:2006/10/15(日) 22:29:49
>>366
親が最小化されている等の理由で見えないときでもWS_VISIBLEは落ちないけど
IsWindowVisible()はFALSEを返す
>>370
WH_SYSMSGFILTER?
373
名前:
351
:2006/10/15(日) 22:37:21
>>371
埋め込んでなさげです。
>>372
トンクス。
ちょっと試してみますです。
374
名前:
デフォルトの名無しさん
:2006/10/16(月) 12:30:15
スレッドA : GetMessage() ループしている Windowなスレッド
スレッドB : 窓を持たない 非Window なスレッド
として、
スレッドB から スレッドA内で生成された Window に対しての SetWindowText() / SendMessage() は
スレッドA が動いていない場合には スレッドB内でブロックされるのでしょうか?
375
名前:
デフォルトの名無しさん
:2006/10/16(月) 12:36:57
何故試さない?
376
名前:
374
:2006/10/16(月) 12:47:28
デバッガではブロックされているように見えるんだけど
仕様なのかどうかわからないので質問してみました
377
名前:
デフォルトの名無しさん
:2006/10/16(月) 12:59:23
仕様
378
名前:
デフォルトの名無しさん
:2006/10/16(月) 13:07:28
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/messagesandmessagequeuesreference/messagesandmessagequeuesfunctions/sendmessage.asp
>f the specified window was created by a different thread, the system switches to that thread and calls the appropriate window procedure.
ウィンドウメッセージはそのウィンドウが所属するスレッドで処理される。
よって、スレッドAがsendされたメッセージを処理できない状態なら、スレッドBはブロックされる。
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/messagesandmessagequeuesreference/messagesandmessagequeuesfunctions/sendmessage.asp
>Note that the receiving thread need not yield control explicitly; calling any of the following functions can cause a thread to yield control implicitly.
>DialogBox, DialogBoxIndirect, DialogBoxIndirectParam, DialogBoxParam, GetMessage, MessageBox, PeekMessage, SendMessage
379
名前:
374
:2006/10/16(月) 13:15:54
>>377-378
ありがとうございます。 仕様ということで理解しました。
スレッド設計見直しか…
スレッドB が定期的に SendMessage してて、スレッドA の WM_CLOSE をきっかけに
スレッドB を停止させようとしてた(停止用 event をsignalにして theaed handle が signal まで待つ)のですが、
そこでデッドロックしていたと…
380
名前:
デフォルトの名無しさん
:2006/10/16(月) 13:26:55
>>379
かつて俺が遭遇した状況と同じだぁ
381
名前:
デフォルトの名無しさん
:2006/10/16(月) 17:40:09
すいません質問させて下さい。
ファイルを保存する際に、コモンダイアログボックスを呼び出した場合
デフォルトでファイル名の場所に、文字列を入れるにはどうしたら良いのでしょうか。
よろしくお願いします。
382
名前:
デフォルトの名無しさん
:2006/10/16(月) 18:07:04
印刷設定ダイアログを開いてWindowsに反映させる方法を教えて下さい。
プリンタドライバの固有の設定(集約印刷)を反映させる方法が分かりません。
383
名前:
デフォルトの名無しさん
:2006/10/16(月) 18:22:10
今回初めてwin32apiを使用するのですが
ウィンドウサイズを変更したりウィンドウを移動させたりすると
ウィンドウプロージャのデフォルトの部分
default:
return DefWindowProc(hWnd, message, wParam, lParam);
で0xC0000005のエラーを吐いてしまいます。
ウィンドウを移動したりしない場合は問題なく動作してるのですが・・・
どのような場合にこういうエラーが起こるのかアドバイスを頂ければと思います。
384
名前:
デフォルトの名無しさん
:2006/10/16(月) 18:27:18
lineto()で閉じた図形を描いてその中を塗りつぶす方法が知りたいです。
385
名前:
デフォルトの名無しさん
:2006/10/16(月) 18:28:52
頑張れば出来る
386
名前:
デフォルトの名無しさん
:2006/10/16(月) 18:29:54
>>383
日本語でおk
387
名前:
386
:2006/10/16(月) 18:31:43
0xC0000005のエラーってなんだ?
アドレスのこと?
アクセス違反か?
case WM_SIZE:の下にちゃんとreturn 0入ってる?
388
名前:
デフォルトの名無しさん
:2006/10/16(月) 18:32:39
>>387
0xC0000005 って言えば2ちゃんでも超有名なあれじゃないか。
見たことないの?
389
名前:
386
:2006/10/16(月) 18:34:52
>>388
いやだからアクセス違反の0xC0000005なのかアドレスを示す0xC0000005なのかと
390
名前:
デフォルトの名無しさん
:2006/10/16(月) 18:38:32
>>386
言葉足らずで申し訳ないです。
アクセス違反の0xC0000005です。
> 0xC0000005: 場所 0xe36eeb84 を読み込み中にアクセス違反が発生しました。
391
名前:
386
:2006/10/16(月) 18:43:07
ふむ
関係ない変数とかをプロシージャに返してない?
int message;
・・・
switch(msg){
・・・
default:
return DefWindowProc(hWnd, message, wParam, lParam);
・・・
まさかねそんなことしないよね
392
名前:
383
:2006/10/16(月) 18:48:34
>>386
そういうことはしてないと思います。
ウィンドウサイズを変更するとすぐにエラーが出てしまいます。
WS_PAINTの処理をしてそのあとdefaultの項に移動してそこで止まります。
ウィンドウを移動すると1秒ぐらいは問題なく移動できてその後エラーが出てしまいます。
393
名前:
デフォルトの名無しさん
:2006/10/16(月) 18:52:27
break の入れ忘れとか
特定の case で初期化される
>>391
の message のような変数を 別の case で利用しているとか
hWnd 書き換えてしまったとか
394
名前:
386
:2006/10/16(月) 18:52:42
そーすうp汁
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi
395
名前:
デフォルトの名無しさん
:2006/10/16(月) 18:55:50
>>384
キーワード:クリッピング
ウザイからコテはずすか・・
396
名前:
383
:2006/10/16(月) 19:15:34
>>386
アップしてみました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2782.txt
プログラム自体を初めて日が浅いことと
時間の関係でやっつけ仕事になり酷いコードになっています。
宜しくお願いします。
397
名前:
デフォルトの名無しさん
:2006/10/16(月) 19:22:23
manager.Set_Paint(&hDC,&hPen,&ps); で auto変数へのポインタ設定してるじゃん。
こういう使い方って保証されたっけ?
WM_CREATE で設定後スコープ脱出
WM_PAINT で設定されたポインタ参照。 参照先は上の状態で設定したスコープ内ポインタ
398
名前:
デフォルトの名無しさん
:2006/10/16(月) 19:24:37
クラスの実体は?
DeleteObjectしてるけど、ちゃんとどこかでCreatePenしてる?
システムオブジェクトはDeleteObjectしちゃだめだよ
399
名前:
383
:2006/10/16(月) 19:30:36
添削気取り乙
400
名前:
デフォルトの名無しさん
:2006/10/16(月) 19:32:04
>>398
あー・・・
CreatePenは最初はしてたけど途中から使わなくなったんで消してましたorz
しかし、その部分をコメントアウトしてやっても改善しないようです。
どういうことなんだろ・・・
401
名前:
383
:2006/10/16(月) 19:32:16
>>399
誰だオメー
402
名前:
デフォルトの名無しさん
:2006/10/16(月) 19:33:26
何で
>>397
はスルーなんだ?
403
名前:
デフォルトの名無しさん
:2006/10/16(月) 19:33:50
>>397
もしかして、とても変な事してますかね・・・
404
名前:
デフォルトの名無しさん
:2006/10/16(月) 19:34:36
不愉快だ。帰る。
405
名前:
デフォルトの名無しさん
:2006/10/16(月) 19:35:27
>>404
おこらせてしまったようです、申し訳ありません
406
名前:
デフォルトの名無しさん
:2006/10/16(月) 19:36:06
>>405
いえいえ。こちらこそ。
407
名前:
デフォルトの名無しさん
:2006/10/16(月) 19:39:43
「俺が」よくするのはバッファオーバーフローとかしてて
DefWindowProcに到達するころにはhwndがぶっ壊れてる んでアクセス違反と
408
名前:
デフォルトの名無しさん
:2006/10/16(月) 19:39:50
>>403
例えの話になるけど、auto変数確保って呼び出された時のスタックを擬似拡張してやりくりしてるわけじゃん。
そんな場所へのポインタを保持したところで、
WM_CREATE 呼び出し時のスタック状況が一致すること前提でないと正しく機能しないと思うんだけど?
409
名前:
デフォルトの名無しさん
:2006/10/16(月) 19:41:29
>>403
auto変数(staticとかexternとかを省略した場合のデフォルト)になってるから
WndProcを抜けるとその変数のメモリ領域は開放される
だからそれを参照しようとするとまずい
ってことだと思うよ
static宣言でもつけとけばいいんじゃね
410
名前:
デフォルトの名無しさん
:2006/10/16(月) 19:42:53
それ以前に抜け出した後、そこの内容は壊される可能性があるか。 <auto変数
411
名前:
デフォルトの名無しさん
:2006/10/16(月) 19:56:32
>>410
・・・えっ?
釣れますか?
412
名前:
410
:2006/10/16(月) 20:03:30
>>411
釣りじゃなくて素で気にしてるんだけど… 釣りに見えた?
void foo(int a)
{
static int* p=NULL;
int me;
if (a==0) p=&me else if (a==1) *p=1; else printf("%d", *p);
}
void bar()
{
int a, b, c; ..... /* a,b,c を適度に R/W */
}
として
foo(0); bar(); foo(1); bar(); bar(); foo(-1); と呼び出したらおかしくならないか?
413
名前:
デフォルトの名無しさん
:2006/10/16(月) 20:06:39
>>412
そういう意味ね。
>それ以前に抜け出した後、そこの内容は壊される可能性があるか。
って書いてたからカンチガイした。
>それ以前に抜け出した後、そこの内容は壊される可能性がある。
ならわかった。
414
名前:
383
:2006/10/16(月) 20:13:45
返答ありがとうございます
色々試してみようと思います
415
名前:
383
:2006/10/16(月) 20:54:26
今日はもう帰宅するので明日試してみます
また明日質問させて頂くかもしれませんがよろしくお願いします
416
名前:
デフォルトの名無しさん
:2006/10/16(月) 22:51:07
そう言い残して
>>383
は帰宅のとについた・・・・
しかし・・・・
この後
>>383
に起こる悲劇を誰が予測できたであろうか。。。。
417
名前:
デフォルトの名無しさん
:2006/10/16(月) 23:09:54
ヽ|/
/ ̄ ̄ ̄`ヽ、
/ ヽ
/ \,, ,,/ |
| (●) (●)||| |
| / ̄⌒ ̄ヽ U.| ・・・・・・・・ゴクリ。
| | .l~ ̄~ヽ | |
|U ヽ  ̄~ ̄ ノ |
|  ̄ ̄ ̄ |
418
名前:
デフォルトの名無しさん
:2006/10/17(火) 00:21:04
お前らw
419
名前:
デフォルトの名無しさん
:2006/10/17(火) 01:28:37
タスクトレイにあるアプリケーションの画面を表示させるにはどうすればいいのでしょうか?
420
名前:
デフォルトの名無しさん
:2006/10/17(火) 01:59:08
タスクトレイでマウスクリックしたことにする
421
名前:
デフォルトの名無しさん
:2006/10/17(火) 08:34:13
ウインドウハンドルから最前面表示設定されているかどうか判定するAPIってありますか?
最前面表示するSetWindowPosで設定しても、GetWindowPosみたいなのがあるかと思いましたが、
探してもみつからないので、お助けください。
422
名前:
デフォルトの名無しさん
:2006/10/17(火) 08:36:18
>>382
もヨロ
423
名前:
383
:2006/10/17(火) 09:19:25
昨日はありがとうございました。
おはようございます
昨日の問題についてはAuto変数ををstaticにすることで無事解決したようです。
ありがとうございました。
ところで
>>412
の
foo()とbar()って互いに影響を及ぼすような物ではないように思えるのですが
foo(0); bar(); foo(1); bar(); bar(); foo(-1); の様に繰り返すとどのような不都合が発生するのでしょうか・・・?
424
名前:
デフォルトの名無しさん
:2006/10/17(火) 09:29:08
>>423
> 昨日の問題についてはAuto変数ををstaticにすることで無事解決したようです。
原因は理解したの?
425
名前:
383
:2006/10/17(火) 09:46:48
ポインタにauto変数を代入してるため
procが呼び出されて終了するとポインタもとが削除されてるからエラーになる…
でいいのかな
毎回ポインタを再設定するかポインタ元をstatic変数にすればいいのですかね
426
名前:
デフォルトの名無しさん
:2006/10/17(火) 09:55:20
>>425
解かってみるみたいだけど、
そしたら何故
>
>>412
の
> foo()とbar()って互いに影響を及ぼすような物ではないように思えるのですが
こんな疑問が出るんだろう…
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2785.c
これでも参考に考えてくれ
427
名前:
デフォルトの名無しさん
:2006/10/17(火) 11:10:14
>>421
GetWindowLongのGWL_EXSTYLEじゃないかな?
428
名前:
デフォルトの名無しさん
:2006/10/17(火) 11:22:54
>>382
もヨロ
429
名前:
デフォルトの名無しさん
:2006/10/17(火) 13:02:00
>>428
rundll32.exe printui.dll PrintUIEntry
じゃ駄目?
430
名前:
デフォルトの名無しさん
:2006/10/17(火) 14:18:06
>>423
不都合っていうか int me; が割り当てられるスタックの中身が
書き換わる可能性があるってことだろ。
意図的に
>412
のコードを書いてるなら
値は未定義だとしてもちゃんと動くんじゃね?
431
名前:
デフォルトの名無しさん
:2006/10/17(火) 15:13:12
>>382
もヨロ
432
名前:
383
:2006/10/17(火) 15:46:02
>>426
参考のコードを実行したところ
int meのアドレスとint bのアドレスが同じになってました。
つまり
static int* pの中身がbar()の実行中はint bになってしまう
(*pの中身が不定になる?)
ということで良いのでしょうか
とにかくやってはいけないことをやっているという事は良くわかりました。
ありがとうございます。
433
名前:
デフォルトの名無しさん
:2006/10/17(火) 18:15:57
SHGetFileInfo()のSHGFI_ICONLOCATIONはパスのアイコンがしまわれてる
位置を返すのですが、大抵のアイコンはDLLに入っててインデックスが
わからないのでアイコンが取得ができない…orz
こいつはいったい何のためにあるのですか?
それともアイコンインデックスを取得する何か別な方法があるのですか?
教えてください。
434
名前:
デフォルトの名無しさん
:2006/10/17(火) 18:37:06
SHFILEINFO::iIconは違うのか?
435
名前:
デフォルトの名無しさん
:2006/10/17(火) 18:38:42
・SHGFI_ICONLOCATION.....ファイルを表すアイコンを含むファイル名を返す
(ファイル名はpsfiにより指定されるTSHFileInfo構造体のszDisplayNameにコピーされる)
436
名前:
デフォルトの名無しさん
:2006/10/17(火) 18:54:53
>435
MSDNには、それに続いてこう書いてある。
The icon's index is copied to that structure's iIcon member.
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/functions/shgetfileinfo.asp
もっとも、アイコンを得たいだけなら、ExtractAssociatedIconの方が直接的だと思う。
437
名前:
433
:2006/10/17(火) 19:29:23
完璧見落としてました…すみません。
アイコンリソースを直接取得したかったので調べてました…
ありがとうございましたm(__)m
438
名前:
デフォルトの名無しさん
:2006/10/17(火) 19:39:34
>>382
もヨロ
439
名前:
デフォルトの名無しさん
:2006/10/17(火) 19:52:06
delphiの方で教えてくれるんじゃネーの?
440
名前:
デフォルトの名無しさん
:2006/10/17(火) 21:48:49
>>382
>>429
は試したんかいな?
441
名前:
デフォルトの名無しさん
:2006/10/18(水) 00:09:10
ウィンドウ分割するときって皆どうしてる?
猫でもわかる〜みたいに
ウィンドウに子ウィンドウを貼ってる?
MFCはどうやってやってるのかイマイチ和漢ね
442
名前:
567
:2006/10/18(水) 00:15:38
念力
443
名前:
デフォルトの名無しさん
:2006/10/18(水) 00:46:22
WTL
444
名前:
デフォルトの名無しさん
:2006/10/18(水) 01:07:11
>>441
スパイすれば分かるじゃん
445
名前:
デフォルトの名無しさん
:2006/10/18(水) 02:33:47
モジュールの自分自身が利用しているメモリ使用量(タスクマネージャで表示されている数)を
取得する関数ってありますか?
446
名前:
デフォルトの名無しさん
:2006/10/18(水) 11:57:24
MSDNの「TCHAR 単位で指定します。」ってのは TCHAR buf[MAX_PATH] でいうと
sizeof(buf) ではなく MAX_PATH を渡せって意味?
447
名前:
デフォルトの名無しさん
:2006/10/18(水) 12:10:17
普通に考えたらそうだろうね
448
名前:
デフォルトの名無しさん
:2006/10/18(水) 12:15:36
トン
TCHAR なのに sizeof(buf) 渡してるサンプルも結構あるからアルェ-と思ってな
449
名前:
デフォルトの名無しさん
:2006/10/18(水) 12:23:19
>>448
APIによってバッファサイズの指定単位がばらばらだからね。
「TCHAR単位で」と明示してある場合は、sizeof(TCHAR) * 要素数。
450
名前:
デフォルトの名無しさん
:2006/10/18(水) 12:27:14
>>499
>「TCHAR単位で」と明示してある場合は、sizeof(TCHAR) * 要素数。
違うような気がする。
451
名前:
デフォルトの名無しさん
:2006/10/18(水) 12:39:34
>>450
うわ、素で書き間違えたww
TCHAR単位の場合は、要素数ですねorz
452
名前:
デフォルトの名無しさん
:2006/10/18(水) 13:24:26
Windowsが終了するときに来るメッセージってありますか?
453
名前:
デフォルトの名無しさん
:2006/10/18(水) 13:29:53
WM_QUERYENDSESSION/ENDSESSION
454
名前:
デフォルトの名無しさん
:2006/10/18(水) 13:52:30
MSDNOnlineでDisableProcessWindowGhostingが見つからないのですが禁止ですか。
(VS2003付属のmsdnにはありました)
455
名前:
デフォルトの名無しさん
:2006/10/18(水) 14:13:16
VS2005 と WindowsSDK for VistaRC1 のには載ってる。
456
名前:
デフォルトの名無しさん
:2006/10/18(水) 14:16:12
>>453
thx!!
457
名前:
デフォルトの名無しさん
:2006/10/18(水) 20:55:32
クラス名もウィンドウキャプションも環境によって変化するウィンドウのウィンドウハンドルを取得したのですが
どうやればできるのか教えて下さい。宜しくお願いします。
458
名前:
デフォルトの名無しさん
:2006/10/18(水) 20:56:18
ごめんなさい
ウィンドウハンドルを取得したいのですが の間違いでした。
459
名前:
デフォルトの名無しさん
:2006/10/18(水) 21:00:40
ウィンドウキャプションを目視で確認してからウィンドウを探せばいいと思うよ
まあプログラムだけでやりたいなら取得したいウィンドウの共通点みたいなのがないと難しいんじゃないかと思う
ウィンドウの大きさとかウィンドウを作成したプロセスのexeファイルのパスとか
460
名前:
デフォルトの名無しさん
:2006/10/18(水) 21:03:17
列挙するだけしといて キャプションを正規表現で刈り込んでくとか…
プロセスid で刈り込んでくとか…
# WindowClass 名が変化する ってのは MFCで書かれたアプリケーションか?
461
名前:
デフォルトの名無しさん
:2006/10/18(水) 21:15:35
標準のEDITコントロールとかを探そうとしてるのか?
トップレベルのWindowを探しておいて、そこのn番目の兄弟/子供から って
事前に対象を絞り込んだほうが良いと思われ
462
名前:
457
:2006/10/18(水) 21:24:46
>>459
それはProcessIDから調べるという事ですか?
>>460
正規表現はよくわからないのでProcessIDからどうにかならないか調べてみる事にします
お二人共有難うございました。
なんとなくEnumWindowsを使えばいいのかなぁと思ってるけど合ってるのかな
463
名前:
デフォルトの名無しさん
:2006/10/18(水) 21:27:53
>>462
何がしたいのか具体的に言ってくれればもっとちゃんと答えられるかもしれない
464
名前:
デフォルトの名無しさん
:2006/10/18(水) 21:28:52
>>461
そうです。Editを探してそこにテキストをセットしたいと考えています。
FindWindowで見付からないかと見てみたらクラス名もキャプションも使えそうにないので質問しました。
3行目以降何を言っているのか理解できない俺には無理なんでしょうか
465
名前:
デフォルトの名無しさん
:2006/10/18(水) 22:22:38
自分のプログラム中でなら、概ね GetDlgItem と リソースID で対象は特定できるな
他人のプログラム中のEDITコントロールが対象なら
>>459-461
のように手間をかけねばならない。
やりたいことをはっきり示せ
466
名前:
457
:2006/10/18(水) 23:37:50
EnumWindowsで列挙したWindowからGetWindowTextでキャプションを取得し特定の文字列がキャプションの中に存在したら
そいつが親Windowって事で見つける事ができたのですが
目的のEditコントロールが、一番上の親Windowから見てひひひひ孫くらいに存在して
しかもひひ孫とひひひ孫くらいにまた可変クラスネームが存在し、
EnumChildWindowsでは追いかけきれずに目的のコントロールをプログラム中から特定する事ができませんでした。
LimeChatで外部ツールから発言させようと思っていたのですが無理っぽいです。
皆さん有難うございました。違う角度からアプローチしてみます。
467
名前:
デフォルトの名無しさん
:2006/10/18(水) 23:45:45
>>466
>しかもひひ孫とひひひ孫くらいにまた可変クラスネームが存在し
わざわざ途中の調べなくてもよくね?
無条件で子ウィンドウ列挙してってひたすら文字列を比較でいいじゃないか
まあ動作めちゃくちゃ遅くなるだろうけど・・・
手動でもいいならLimeChat起動する度にマウスキャプチャー使って取得するって手もあるが
468
名前:
デフォルトの名無しさん
:2006/10/18(水) 23:49:03
>>466
ウインドウ列挙だけに頼らないで他の条件からも特定していけばいいんでね
469
名前:
デフォルトの名無しさん
:2006/10/19(木) 01:21:32
ダイアログボックスを
リソーススクリプトで設定、DialogBox(...)で呼び出す場合、
文字色を変えたり
不定形リージョンを指定したり
できないんですか?
既出だったらごまんなさい。
470
名前:
デフォルトの名無しさん
:2006/10/19(木) 05:19:52
>>466
EnumChildWindowsでよくない?
見つかった子の親と孫もついでに調べて条件に合ってるか判別してくとか
471
名前:
デフォルトの名無しさん
:2006/10/19(木) 08:51:36
自分とは別の exe ファイルの中の文字列リソースを取得するのはどうするの?
DLL は、LoadLibrary → LoadString で取得できた。
CreateProcess → LoadString?
472
名前:
デフォルトの名無しさん
:2006/10/19(木) 11:52:16
>>471
ふつうに LoadLibrary でいいと思うけど。
473
名前:
デフォルトの名無しさん
:2006/10/19(木) 16:00:48
>>472
どもです。出来ました。
LoadLibrary って DLL だけかと思いこんでました。
ありがとうございました。
474
名前:
デフォルトの名無しさん
:2006/10/19(木) 17:31:45
>>427
ありがとう。かなりうまくいきました。
475
名前:
デフォルトの名無しさん
:2006/10/19(木) 17:40:19
LoadLibraryExにLOAD_LIBRARY_AS_DATAFILEを指定して読み込んだ方がいいような気がする。
476
名前:
デフォルトの名無しさん
:2006/10/19(木) 18:05:24
最前面であるかを知りたいのですが、GetWindowPosがな…、
>>421
おまいは俺か
GetWindowLongのGWL_EXSTYLEで、WS_EX_TOPMOSTとorとればいいんですね。
ありがとうございました。
477
名前:
デフォルトの名無しさん
:2006/10/19(木) 18:22:55
DiskeeperのIO Smartみたいな機能ってどうやって実装すればいいですか?
ディスクにガリガリアクセスするようなアプリで
他がHDDにアクセスしていたらその間はアプリ側の作業を止めるという物です。
プロセスのプライオリティの設定では出来ません。
478
名前:
デフォルトの名無しさん
:2006/10/19(木) 18:29:47
>>476
orじゃダメだと思うけどな。
479
名前:
デフォルトの名無しさん
:2006/10/19(木) 18:30:11
>>476
そう・・・私はあなたの生き別れた双子の妹です。
480
名前:
デフォルトの名無しさん
:2006/10/19(木) 18:30:59
>>476
安藤
481
名前:
デフォルトの名無しさん
:2006/10/19(木) 19:59:49
コントロールを作成するとき、ウィンドウハンドル値を指定して作成できますか?
または、あるコントロールに対しウィンドウハンドルを任意の値に書き換えることは出来るのでしょうか?
よろしくお願いします。
482
名前:
デフォルトの名無しさん
:2006/10/19(木) 20:04:35
どちらもできません。
483
名前:
デフォルトの名無しさん
:2006/10/19(木) 20:06:32
>>481
できません。
ハンドルの実体はOSが内部で使用している構造体を指すポインタ。
484
名前:
デフォルトの名無しさん
:2006/10/19(木) 20:22:04
今初めて知った
485
名前:
デフォルトの名無しさん
:2006/10/19(木) 20:43:37
だから被ることはないわけだ
486
名前:
デフォルトの名無しさん
:2006/10/19(木) 21:39:34
>>483
その構造体のなかってどうなってるの?
487
名前:
デフォルトの名無しさん
:2006/10/19(木) 21:39:57
質問です。
WMPAINTで四角を表示してクリックで位置を変えるようにしたいのですが
HDC hdc;
PAINTSTRUCT ps;
int n=10;
switch (msg) {
case WM_LBUTTONDOWN:
n=n+10;
InvalidateRect(hWnd, NULL, TRUE);
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd , &ps);
RoundRect(hdc , n , 10 , 50 , 30 , 50 , 50);
EndPaint(hWnd , &ps);
return 0;
これでは何故だめなのでしょうか?
かなり考えたのですが分からないのでどなたか教えてください
488
名前:
デフォルトの名無しさん
:2006/10/19(木) 21:43:34
>>487
そういう n は「ローカル変数」といって、関数を抜けた時点で値は保障されない。
次に呼ばれる時には再び 10 が代入される。
static int n = 10; としておけば、関数を抜けても値は保持されるし、
一番最初にこの関数が実行されるときにだけ 10 が代入されて、思った通りに動く。
489
名前:
デフォルトの名無しさん
:2006/10/19(木) 21:56:51
>>488
丁寧に教えてくれて有難うございます。
490
名前:
デフォルトの名無しさん
:2006/10/19(木) 21:57:33
>>486
禁則事項です
491
名前:
デフォルトの名無しさん
:2006/10/19(木) 22:00:33
禁則?!
492
名前:
デフォルトの名無しさん
:2006/10/19(木) 23:07:34
>>486
公開されてないし、ポインタという保証も無い。
493
名前:
デフォルトの名無しさん
:2006/10/19(木) 23:32:12
スタティックのローカル変数と
グローバル変数ってスコープが違うだけで
他の動きは同じだよね?
494
名前:
デフォルトの名無しさん
:2006/10/19(木) 23:35:33
クラスインスタンスだと、初期化される時が違う。
グローバル変数だとmain/WinMain関数よりも前にコンストラクタが呼ばれる。
静的変数だと最初にその変数が参照されたときにコンストラクタが呼ばれる。
495
名前:
デフォルトの名無しさん
:2006/10/19(木) 23:37:11
さすが
勉強になります
496
名前:
デフォルトの名無しさん
:2006/10/19(木) 23:37:20
>>493
定数でない初期値がある場合、最初の1度だけ初期化が行われるように
初期化済みかどうかを覚えておくフラグと、チェックするコードが追加される。
void foo(int x) { static int n = x; return x; }
↑最初の1度だけxが代入され、その後ずっと変わらない。
497
名前:
デフォルトの名無しさん
:2006/10/19(木) 23:43:55
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
HANDLE hHandle;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hHandle);
LUID lLuid;
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &lLuid);
LUID_AND_ATTRIBUTES lLuidAttr;
lLuidAttr.Luid = lLuid;
lLuidAttr.Attributes = SE_PRIVILEGE_ENABLED;
TOKEN_PRIVILEGES Newtoken;
Newtoken.PrivilegeCount = 1;
Newtoken.Privileges[0] = lLuidAttr;
AdjustTokenPrivileges(hHandle, FALSE, &Newtoken, 0, NULL, NULL);
CloseHandle(hHandle);
ExitWindowsEx(EWX_POWEROFF, 0);
return 0;
}
498
名前:
デフォルトの名無しさん
:2006/10/20(金) 00:20:34
hBitmap = CreateCompatibleBitmap(hdc, fwidth, fheight)
GetDIBits(hdc, hBitmap, 0, fheight, lpPixel, bi, DIB_RGB_COLORS)
a = GetPixel(hdc, 100, 100)
GetDIBitsでlpPixelの中に格納されている情報とGetPixelでは値が異なるみたいなのですが、
lpPixelにはRGB値が格納されないのですか?
もし可能であればlpPixelに格納されている情報をRGBにしたいのですが、
どうすればできますか?
499
名前:
デフォルトの名無しさん
:2006/10/20(金) 00:26:07
CreateCompatibleBitma() で生成せずに
CreateDIBSection() で 24bit カラーのビットマップを作るしかないようなキガス
500
名前:
デフォルトの名無しさん
:2006/10/20(金) 00:30:36
位置に対するアドレスの計算はどうやってやってるんだ?
■過去ログ置き場に戻る■
1-
前250
次250
最新50
DAT2HTML
0.33f Converted.