■過去ログ置き場に戻る■ 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.