■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

Win32API質問箱 Build14
251 名前:デフォルトの名無しさん :03/10/22 19:57
>>250
いえ していないです。
そういえば なんとなく思い出した・・
もしよければ具体的な命令を教えてください。

252 名前:デフォルトの名無しさん :03/10/22 20:04
IsDialogMessage

253 名前:デフォルトの名無しさん :03/10/22 20:20
解決しましたありがとうございます。

254 名前:253 :03/10/22 21:03
すみません うまくいかない・・・・
TABキーは反応するけど 1つめのボタンから
次のボタンへフォーカスが移動しないです。
やはり ダイアログでつくるしかないのでしょうか?

255 名前:デフォルトの名無しさん :03/10/22 23:59
解決しましたありがとうございます。

256 名前:227 :03/10/23 00:11
>>229
回答ありがとうございます。簡単に実現は無理でしたか。
実装するのは茨の道ですね。

257 名前:デフォルトの名無しさん :03/10/23 02:45
同期オブジェクトのミューテックスについて質問させてください。

あるスレッドで待機関数を使ってミューテックスの所有権をもらい、
さらに、同じスレッドでもう一度待機関数を使って同じミューテックスの
所有権を(すでに持っているにもかかわらず)もらいます。
で、この場合、ReleaseMutexは2回実行する必要があるのでしょうか?
早い話、ミューテックスオブジェクトは内部に参照カウントみたいなのを
持っているのでしょうか?

どうも、自分の感触じゃあ2回実行する必要があるような気がするんですが
MSDNにはその辺のことについての記述が見つからないもので・・・。
よろしくお願いします。


258 名前:デフォルトの名無しさん :03/10/23 02:54
createDIBSection(ベース)とSetDIBits(コピー用ソース)の設定を32ビットでビットフィールドにしたら、
透過処理はAPIがやってくれますか?

259 名前:デフォルトの名無しさん :03/10/23 03:06
>>258
聞く前に試してみれば?

260 名前:デフォルトの名無しさん :03/10/23 03:19
>>259
色々やってはいるんだけど、そろそろ疲労感さえ持ち始めてます。
CreateDibSectionいじる事、もうどれ位だろうか。半年・・・いやもっとか。
説明にMASKの文字はあるけど、具体的にどうとは書いてないし、巧くいかないし。
具体的な方向性とかなんかありませんか?

261 名前:デフォルトの名無しさん :03/10/23 03:52
やってくれないから、白黒2値にして、それでANDとってからORだっけか。
元画像の方もマスクでAND取らないとまずいよね?

262 名前:デフォルトの名無しさん :03/10/23 03:52
>>258
やってくれませんよ。説明にMASKうんぬんは、何かの勘違いでしょう。

263 名前:デフォルトの名無しさん :03/10/23 03:56
OSのバージョンが限定されるがTransparentBltってのはあるが。
あとはリージョン適用して*Bltするぐらいしかなかった気がするが。

264 名前:258 :03/10/23 05:06
うーん。これに出てるマスクってどういう意味ですか?
もー、わけがわからない。

http://support.microsoft.com/default.aspx?scid=kb;ja;94326
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_mfc_bitmapinfo_structure.asp



265 名前:デフォルトの名無しさん :03/10/23 05:26
>>264
たとえば0x00FFFFFFからRGB成分を取り出すためのマスク
0x00FF0000 0x0000FF00 0x000000FFの3つ

266 名前:デフォルトの名無しさん :03/10/23 05:29
32bppや16bpp の BI_BITFIELD 型のビットマップの場合、1pixel をあらわす 32bit や 16bit の中の
どこが Red, Green, Blue の各成分をあらわしているかを、BITMAPINFOHEADER に続く3つのDWORD値
(マスク値)で格納しておくわけです。

通常32bppの場合 Red : 0x00FF0000, Green: 0x0000FF00, Blue: 0x000000FF となります。
16bpp の場合は、 0xF800, 0x07E0, 0x001F (RGB565), 15bpp の場合は 0x7C00, 0x03E0, 0x001F とかが使われます。


267 名前:266 :03/10/23 05:30
↑書いた後に気づいたんだけど、
>>264 の上の URL で詳しくわかりやすく説明されてるし。。。

268 名前:264=258 :03/10/23 05:47
>>261-263
レスthx!
混乱してて、書くの忘れてた。

できれば駄目もとでWin95位からAPIでサポートしてくれてたら良かったのに。。。
マスクって言うから、透過マスクだと思ってたのに、減色マスクのような気がしてきたなぁ。

>>261
白黒2値化は管理するデータが増えるから他の方法を探していたのです。でも、最後の砦も没っぽいですね。
この手しかないのか。

>>262
勘違いかもしれないです。

>>263
TransparentBltってWin2K以降だった気がします。
開発環境は、MEなんです。いま、デバッグやっててリソースメータが、8%,19%,8%指してます。ガクブル。



269 名前:デフォルトの名無しさん :03/10/23 05:54
>>265-267
レスthx!
なるほど、長い戦いが終わりました。完敗です。(笑
いやー、まさかマスクって言葉が意外と広域な意味で使われるとは思いもしなかったです。
それを透過マスクだと思い込んだばっかりに・・・。いや〜、馬鹿すぎ。
しかしまー、切り替えができました。
ありがとう。

270 名前:269=264 :03/10/23 06:06
>>269
えーっと名前書き忘れてる。

マスク値で色を表現するからBITFIELDなんですね。(APIがANDとるなりするから。
やっと意味がわかりました。
今、いい感じで気が抜けちゃったので寝ます。
おやすみ〜。

271 名前:デフォルトの名無しさん :03/10/23 06:52
コントロール(リストビューとか)の親ウィンドウを動的に変更しているのですが、
コントロールのWM_NOTIFYの送り先ってどうやって指定するのでしょうか?
現在の親ウィンドウだと思っていたのですが、
どうも送られてこないのでSPY++で確認したら はじめにSetParentされたウィンドウのようです。
現在の親ウィンドウに正しく送信させる方法をご存知でしたら教えてください。

272 名前:デフォルトの名無しさん :03/10/23 07:28
>>257
用語の使い方がよく分からんからソース晒せ。
Mutexに関してはWeb上の解説サイトによく誤解を含むサンプルが載ってるから気をつけないとね。

273 名前:257 :03/10/23 14:37
272さん、よろしくお願いします。
volatile HANDLE g_hMutex,g_hEvent;
void __cdecl testThread3(void* param)
{
    TCHAR title[32],*lpsz;
    wsprintf(title,"test2:%d",(int)param);

    while(::WaitForSingleObject(g_hEvent,50) == WAIT_TIMEOUT){
        switch(::WaitForSingleObject(g_hMutex,0)){//←ここ
            case WAIT_ABANDONED:
                lpsz = "WAIT_ABANDONED:他人の忘れ物を拾ったのかな?"; break;
            case WAIT_OBJECT_0:
                lpsz = "WAIT_OBJECT_0:自分のものだった?or誰も持っていなかった?"; break;
            case WAIT_TIMEOUT:
                lpsz = "WAIT_TIMEOUT:タイムアウト。他人のものだった?"; break;
            case WAIT_FAILED:
                lpsz = "WAIT_FAILED:失敗。"; break;
        }
        switch(MessageBox(NULL,lpsz,title,MB_YESNOCANCEL)){
            case IDYES:
                ::WaitForSingleObject(g_hMutex,INFINITE); break;//←ここ
            case IDNO:
                ::ReleaseMutex(g_hMutex);
                Sleep(250); break;
            case IDCANCEL: goto EXIT;
        }
    }
EXIT:
    if(ReleaseMutex(g_hMutex) == FALSE) MessageBox(NULL,"Release失敗",title,MB_OK);
    _endthread();
}


274 名前:257 続き :03/10/23 14:40

こんな感じで、いくつかのスレッドを走らせてやると、それぞれメッセージボックスに状態を
表示してどうするか選ぶんですが、あるスレッドで「はい」を選んで「待ち」状態にしておき、
現在ミューテックスを所有しているスレッドで「いいえ」をえらんで一度だけReleaseMutexを
呼んでも、さっき待たせておいたスレッドに所有権が移らないんです。

で、ちょっといじって待機関数を呼んで成功した回数だけReleaseMutexを呼ぶと
(戻り値はすべてTRUEで)うまくいきました。所有権もきちんと移りました。
これはやっぱり内部に参照カウントみたいなのを持っているんじゃないのかな〜と。
でもMSDNとかにはReleaseMutexはただ所有権を解放するとしか書いてなくて、
なんか違うぞと思うんですがどうなんでしょう?


275 名前:デフォルトの名無しさん :03/10/23 14:51
O'REILLYの「Win32/C++マルチスレッドプログラミング詳説」には
「スレッドが、同じミューテックスを、開放する前に繰り返し獲得した場合、
スレッドは、そのミューテックスの所有権を獲得したのと同じ回数だけ
それを開放しなければならない」
と書かれてるな。根拠は知らんが。

276 名前:デフォルトの名無しさん :03/10/23 14:58
>>257
俺は272じゃないが、その辺いじったことあるので横レス。
結論から言うと、ロックした数だけ解放する必要あり。

余談だが以下、Win32APIの「Mutex」と「最大参照カウンタが1のSemaphore」の違い。

「最大参照カウンタが1のSemaphore」は同じスレッドから2回ロック
(WaitForSingleObject)するとデッドロックを起こす。

Mutexは同じスレッドから何度ロックしてもデッドロックは起こらない。
ただしロックした回数だけ解放を行わない限り、他のスレッドは
Mutexをロックできない。

要するにどちらの同期オブジェクトも、ロックした回数解放しろと。

277 名前:257 :03/10/23 15:15
276さんありがと〜。

やっぱそうだよね。これで自信を持ってやってけます。
誰かにそう言ってもらえるだけで安心感がぜんぜん違うなぁ。


278 名前:デフォルトの名無しさん :03/10/23 15:45
質問です。

Creating an Internet Explorer-style Menu Bar
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/faq/iemenubar.asp

を読んで、エクスプローラ風メニューバーを作っているのですが、
マウスがホバーした際、他のツールバーのようにボタンの凸になってしまいます。
これを本物のメニューと同じように文字が反転させたいのですが、どのようにしたら良いでしょうか。
エクスプローラではそのような挙動を示しています。


279 名前:デフォルトの名無しさん :03/10/23 15:46

ちなみに、

該当ツールバーのスタイル:
WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|
TBSTYLE_TRANSPARENT|TBSTYLE_LIST|TBSTYLE_FLAT|
CCS_NODIVIDER|CCS_NOPARENTALIGN|CCS_NORESIZE|CCS_TOP

拡張スタイル:
WS_EX_TOOLWINDOW|TBSTYLE_EX_DOUBLEBUFFER

個々のボタン:
tbb[0].iBitmap=I_IMAGENONE;
tbb[0].idCommand=1;
tbb[0].fsState=TBSTATE_ENABLED;
tbb[0].fsStyle=BTNS_AUTOSIZE/*=TBSTYLE_AUTOSIZE*/|BTNS_DROPDOWN/*=TBSTYLE_DROPDOWN*/;
tbb[0].dwData=0;
tbb[0].iString=(INT_PTR)"File(&F)";

ツールバーへのメッセージ:
SendMessage(hMenubar,TB_BUTTONSTRUCTSIZE,(WPARAM)sizeof(TBBUTTON),0);
SendMessage(hMenubar,TB_ADDBUTTONS,(WPARAM)3,(LPARAM)(LPTBBUTTON)&tbb);
SendMessage(hMenubar,TB_SETIMAGELIST,0,0);
SendMessage(hMenubar,TB_AUTOSIZE,0,0);
ShowWindow(hMenubar,SW_SHOW);

です。なお、ツールバーはレバーコントロールに入れています。

280 名前:デフォルトの名無しさん :03/10/23 20:21
>>277
なんでマニュアル読まないの?

281 名前:276 :03/10/23 20:45
補足だがまあ一応、ヘルプのCreateMutexにそれらしき表記はあるよ……。
「1 つのミューテックスを所有しているスレッドは〜」ってとこだな。

同期オブジェクトに限らず、APIが何かリソースを使用する場合
そのリソースの説明はリソースを作成する関数のヘルプに
書いてあることが多いね。

282 名前:デフォルトの名無しさん :03/10/24 02:46
くだらない質問で申し訳無いのですが、
ReadFileなどでバッファに読み込んだ文字列から、
書式付きで変数への格納を行うにはどうすればよいのでしょうか?

283 名前:デフォルトの名無しさん :03/10/24 02:55
>282 '文字列を書式付きで変数へ格納' ??? 意味わからん。

284 名前:デフォルトの名無しさん :03/10/24 03:10
sscanf

285 名前:デフォルトの名無しさん :03/10/24 08:02
>>282
scanfとか使えば?
ただし、内容が保証できない場合(たぶんこの場合も)、
for (i=0;i < len;i++) {
switch (proc) {
case 1:
if (readBytes[i] == x) {proc=2;}
break;
case 2:
if (readBytes[i] == y) {proc=1;}
else if (readBytes[i] == z) {proc=3;}
break;
}
等として、少しでも不安要素を無くすのが良いかと。

286 名前:デフォルトの名無しさん :03/10/24 10:48
ある別のプログラムを起動させて
そのプログラムが起動時に DLL を読み込んで
DllMain が呼ばれた処理をフックしたいのですが
できる方法はあるでしょうか?

287 名前:デフォルトの名無しさん :03/10/24 17:58
>>280
なんでそんな書き方しかできないの?

288 名前:デフォルトの名無しさん :03/10/24 18:01
>>287
なんで生きてるの?

289 名前:デフォルトの名無しさん :03/10/24 19:14
現在、勉強のために、
タイマーを使ったアプリケーションを作っているのですが、
タイマーを使っている時に、DialogBox()を実行すると、
失敗します。何故でしょうか?

言語はCで、VisualC++6.0sp5を使っています。

290 名前:デフォルトの名無しさん :03/10/24 19:24
>>289
失敗って、具体的にはどの API がどんなエラーコードを返してきて、
そのときの GetLastError の戻り値は何なの?

291 名前:289 :03/10/24 20:24
>>290
>>そのときの GetLastError の戻り値は何なの?
1812 です。
FormatMessage でメッセージ文字列に変換すると、
[指定されたイメージ ファイルはリソース セクションを含んでいません。]
という文字列になります。

292 名前:デフォルトの名無しさん :03/10/24 21:06
VC++.Netを買ったのですが Win32API のドキュメントが英語のしか
見つかりませんがそんなもん? 日本語のは無いの?

293 名前:デフォルトの名無しさん :03/10/24 21:09
>>291
FormatMessageって・・・ ぽりぽり
もまいの環境には「エラールックアップ」がないのか?

294 名前:デフォルトの名無しさん :03/10/24 21:12
ならDialogBoxの1番目か2番目の引数が間違っているのでは。。



295 名前:289 :03/10/24 22:23
>>293
FormatMessage だとすぐに表示できるし別にいいと思うんですが。(エラールックアップ知りませんでした。

>>294
タイマーを使う前は正常に表示できてました。

296 名前:デフォルトの名無しさん :03/10/24 22:49
めんどくせーからソース晒せ

297 名前:デフォルトの名無しさん :03/10/24 23:00
WindowsMediaPlayer6.4は高レベルAPI(MCI ウィンドウ)で作られているのでしょうか?

というか、WindowsMediaPlayer6.4くらい軽いメディアプレーヤーを作るには高レベルAPIでも出来ますか?
それとも中レベルとか低レベルとかまで下がんないと無理ですか?

298 名前:289 :03/10/24 23:11
>>296
2chだと見難いかも

SetTime()のソース
if(!SetTimer(hWnd,1,1000,NULL))
{
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR)&lpMsgBuf,0,NULL);
MessageBox(hWnd,(LPTSTR)lpMsgBuf,"Error",MB_OK | MB_ICONERROR);
LocalFree( lpMsgBuf );
}

WM_COMMANDの中のDialogBox()のソース
case IDM_SETTING:
if(DialogBox(hInst, (LPCTSTR)IDD_SETTINGBOX, hWnd, (DLGPROC)Setting)==-1)
{
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(LPTSTR)&lpMsgBuf,0,NULL);
MessageBox(hWnd,(LPTSTR)lpMsgBuf,"Error",MB_OK | MB_ICONERROR);
LocalFree( lpMsgBuf );

299 名前:289 :03/10/24 23:16
case WM_TIMER:
time(&long_time);
wsprintf(strTime,ctime(&long_time));
InvalidateRect(hWnd, NULL, FALSE);
break;

300 名前:デフォルトの名無しさん :03/10/25 00:17
>>297
DirectShow丸投げでできると思われ

301 名前:デフォルトの名無しさん :03/10/25 03:10
>>298
貼るときはエラー処理外しなさいな
WM_PAINTで何やってるか次第かなぁ

302 名前:デフォルトの名無しさん :03/10/25 03:18
time(&long_time);
wsprintf(strTime,ctime(&long_time));
InvalidateRect(hWnd, NULL, FALSE);

ここでバッファオーバーランかなにかしてるんじゃないの?

303 名前:デフォルトの名無しさん :03/10/25 03:31
Win2KのSystem環境変数のPathへパスの追加を行いたいのですが、APIでレジストリに
直接書き加えても反映してくれません。
一旦、ログオフすると反映されるんですが、実際にpathを見ると%SystemRoot%のような
参照を行っている部分がそのまんまの形で出てくるのでシステムディレクトリにパスが
通らなくなってしまいます。
GUIで環境変数を更新してやるとこの%SystemRoot%も正しく展開されるようになります。
APIでPathを書き換えるにはどうしたらよいのでしょうか?

WSHで環境変数の書換もやってみましたがログオフしなくても反映されるものの、
やっぱり%SystemRoot%は展開されないままでした。

304 名前:デフォルトの名無しさん :03/10/25 04:11
>>303
レジストリいじるときはタイプを REG_SZ じゃなくて REG_EXPAND_SZ にしてる?


305 名前:デフォルトの名無しさん :03/10/25 04:32
>>303
REG_EXPAND_SZ & WM_SETTINGCHANGE

306 名前:デフォルトの名無しさん :03/10/25 10:17
WaitForSingleObjectについての質問なんですが、
現在タイムアウト時間を1msecにしてスレッドにて、
Bitbltでビットマップをスクロールさせています。
ぶっちゃけ、よっしーニュースバーなんですけどね・・・
このスクロールスピードが速いのと遅いパソコンがあって
ついこの前まではグラフィックボードの違いだろうって
思っていたんですが、フラッシュを表示すると・・・
なんといままでのろのろスクロールしていたスクロールが
猛スピードスクロールしはじめて(ノ゜凵K)ノびっくり!!しました。
http://yossy.vis.ne.jp/japanese.html
ここからダウンロードしてニュースのスクロールスピードを
最速にしてみてスクロールスピードが速くならなった方は
どこかのホームページ上・・たとえば、
http://www.macromedia.com
でフラッシュを表示してみると、猛スピードでスクロールし始めます。
これはいったいどういうことなんでしょうね?。
何かすれば1msecのWaitが正常になるってことだろうとは思うのですが
ちょっと調べてみてもよくわからないので、わかる方がいらしたら教えてください。
ちなみにSleepに変更しても結果は同じで、CPUのWait処理(ただのループ)に
変更するとどのパソコンでも一定の速度になります。

307 名前:デフォルトの名無しさん :03/10/25 10:58
>>306
WaitForSingleObjectの戻り値はWAIT_TIMEOUTが返ってますか?


308 名前:デフォルトの名無しさん :03/10/25 11:01
>>306
キイハナで申し訳ありませんが、通常時のタイマの分解能は
あまり高くなくて、しかもOSによって違うらしいです。
マルチメディアタイマを起動すると、分解能が1msecまで上がるそうですよ。

309 名前:デフォルトの名無しさん :03/10/25 11:04
>>308
 timeBeginPriodで精度をせっていすればSleepの精度があがります。
 でもスレッド大麻が一番正確です。



310 名前:デフォルトの名無しさん :03/10/25 11:09
横入りゴメン!
>309
スレッドタイマって何?
VCでも使える?

311 名前:デフォルトの名無しさん :03/10/25 11:20
スレッド立ててアイドリングで無限ループして、
常にタイマを見張るというのがもっとも正確。タイマ時間が経過した時点で、
他スレッドに制御を渡す、と。

ただそれだとCPU時間をフルに食ってしまうので、実際はたとえば
周期時間の90%はスリープさせて、残りはループで見張るというのが現実的。

309がいってるのもこれかな?

312 名前:デフォルトの名無しさん :03/10/25 11:22
スレッドスイッチング(タスクスイッチング)の分解能が20msだから別スレッドでやっちゃったら、
マルチメディアタイマより精度低いんじゃないの?

313 名前:デフォルトの名無しさん :03/10/25 11:27
>>306
ひょっとして、1msごとにBltしてるんじゃ?
それだとマシンによって速度が変わるのは当然かと。

1msごとにやってるなら描画間隔を30msくらいまで下げて見れ。


314 名前:デフォルトの名無しさん :03/10/25 15:44
よっしーの中の人も大変だな。w

315 名前:デフォルトの名無しさん :03/10/25 17:07
>>312
マルチメディアタイマーも基本的には仕組みはスレッドタイマー同じだったはず(内部でスレッドを作ってたと思う)
 ただ、ある条件で精度が滅茶苦茶になるとどっかのHPで書いてあったはずなんだけどよく覚えてません。
切替制度はどうなってたかよくわからない。


316 名前:デフォルトの名無しさん :03/10/25 17:28
キタ━━━━━(゚∀゚)━━━━━!!

317 名前:デフォルトの名無しさん :03/10/25 17:28
地震スレと誤爆した

318 名前:デフォルトの名無しさん :03/10/25 17:43
じゃ、やっぱtimeBeginPriodが最強ってコト?

319 名前:デフォルトの名無しさん :03/10/25 17:48
16bit 時代はマルチメディアタイマーはハードウェア割り込みその物だったね。
Win9x は 32bit 側の処理がよろしくないようで精度がガタガタになったので、
MSはthunk使って、16bit 側でタイマー使えとか平気でKnowledgeに書いてたな。
そうでもしないと、MIDI シーケンサーの様に精度が必要なアプリが使い物にならな
くなったとか。この辺の問題は NT では発生しなかったのかな?
発生してもthunk使って 16bit側にコード置くなんて芸当ではできないが。


320 名前:デフォルトの名無しさん :03/10/25 17:59
>>312
そんなことは無い、タスクスイッチの引き金(API呼び出しなど)がおきれば
滞りなくスイッチされるし、20msは最長でのスイッチング保証時間

321 名前:デフォルトの名無しさん :03/10/25 18:22
>>319
Windows NT/2000/XP では問題ないらしい。


322 名前:デフォルトの名無しさん :03/10/25 19:05
なんか、Win98でも動作させるのが大変そうだな・・・。

323 名前:デフォルトの名無しさん :03/10/25 19:41
>311
> 周期時間の90%はスリープさせて、残りはループで見張るというのが現実的。

この場合Sleep()の精度が問題になるから、やっぱりtimeBeginPeriod()が必要な罠


324 名前:デフォルトの名無しさん :03/10/25 21:39
1msごとに描画を繰り返すのではなく、
タイマーを見て描画位置を決定するほうが賢いと思うが

325 名前:デフォルトの名無しさん :03/10/25 22:14
各ディレクトリの"ディスク上のサイズ"を取得する方法はないのでしょうか?
SH系のAPIにもそれっぽいものはないし、やはりクラスタサイズから自分で計算するしかないのでしょうか。

やろうとしているのはフォルダ単位のバックアップ処理で、どのみちバックアップ先での必要量は計算しないと
いけないといわれてしまえばそれまでなのですが...



326 名前:デフォルトの名無しさん :03/10/25 22:23
フォルダ内のファイルも含めた合計容量?
普通に全部辿るしかないと思われ

327 名前:デフォルトの名無しさん :03/10/25 22:32
リストビューで項目をクリックして選択されたことを知るにはどうしたらいいですか?

328 名前:デフォルトの名無しさん :03/10/25 22:36
LVN_ITEMCHANGED

329 名前:325 :03/10/25 22:47
>>327
LVN_ITEMCHANGING、LVN_ITEMCHANGEDメッセージあたり?

>>326
もちろんフォルダ内のファイル込みです。
つーかフォルダのみのサイズって0でしょう(もちろん管理領域は別として)。

330 名前:デフォルトの名無しさん :03/10/25 23:30
>>329
LVN_COLUMNCLICK?

331 名前:327 :03/10/25 23:52
>>328,329,330
リストビューをサブクラス化して、取りあえず↓のようにしてみたんですが出来ませんでした・・・
こんな感じじゃないんでしょうか?

LRESULT CALLBACK ListViewProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
 switch(message) {
 case WM_NOTIFY:
  switch(((NMHDR *)lParam)->code) {
  case LVN_ITEMCHANGING:
/* もしくは
  case LVN_ITEMCHANGED:
  case LVN_COLUMNCLICK:
*/
    /* 処理 */
  }
 }
 return CallWindowProc(oldListProc, hwnd, message, wParam, lParam);
}



332 名前:デフォルトの名無しさん :03/10/26 00:02
コンソールアプリで WM_DEVICECHANGEを得る方法はないでしょうか?
GetMessage()してもWM_DEVICECHANGEを含め、何もメッセージが送られてきません。


333 名前:デフォルトの名無しさん :03/10/26 00:09
>>331
ちゃんとNOTIFYメッセージのリフレクションをしてる?
出なければ親ウインドウで受け取れ

334 名前:327 :03/10/26 00:14
ごめんなさい、
  case LVN_ITEMCHANGING:
  case LVN_ITEMCHANGED:
  case LVN_COLUMNCLICK:
は親に返ってくるんですね、取りあえずできるようになりました
ありがとうございました


335 名前:111 :03/10/26 10:14
すみません。やっぱり駄目なようです。
どうやら、XP環境では肝心のアプリで動くのですが、
WIN98の場合は、読み込み違反が出てしまいます。

WIN98でも自作プログラムにイメージを渡した場合はうまく行くので、
VCLの命令の仕業ではないと思うのですが。

このコードよりもより旧式(もしくは安定した)な
メモリの渡し方はあるのでしょうか?


336 名前:111 :03/10/26 10:18
(*画像をポインタの形に置き換える*)
function createImage(var bitmap:TBitmap):PCardinal;
var
x:Integer;
car:PCardinal;
buffer:Pointer;
stream:TMemoryStream;
begin
stream:=TMemoryStream.Create();

try
bitmap.SaveToStream(stream);
stream.Position:=0;
x:=stream.Size;
car:=PCardinal(GlobalAlloc(GPTR,x));
//GHNDでの受け渡しは検証済み。
buffer:=Pointer(car);
stream.ReadBuffer(buffer^,x);
finally
stream.Free;
bitmap.Free;
end;

result:=car;

end;



337 名前:111 :03/10/26 10:20
(*要求を受け取り、画像をポインタで返す*)
function GetImage(fileName:PChar;var data:PCardinal):boolean;stdcall;
var
bitmap:TBitmap;
director:TImageDirector;
begin

result:=false;
director:=TImageDirector.Create();


bitmap:=director.loadImage(fileName);

if(bitmap<>nil)then
begin
data:=createImage(bitmap);
result:=true;
end;

end;

338 名前:デフォルトの名無しさん :03/10/26 12:07
SDKインストールしたhelpフォルダのヘルプってどうやって見るんでしょう?
拡張子がhxs,hxj,hxk,hxtとかになっていて、
テキストで開くとXMLのようなんですが。


339 名前:デフォルトの名無しさん :03/10/26 12:32
>>338
スタートメニューからPlatform SDK Documentationをクリック




340 名前:338 :03/10/26 12:46
>>339
THX!

341 名前:デフォルトの名無しさん :03/10/26 14:56
RichEditコントロールで、
現在画面内に何行目から何行目まで表示されているかを知るにはどうしたらいいですか。

342 名前:デフォルトの名無しさん :03/10/26 18:45
>>341
文字幅と高さから計算するしかないんでないの?


343 名前:デフォルトの名無しさん :03/10/26 18:59
>>341
EM_GETFIRSTVISIBLELINEと・・・

344 名前:デフォルトの名無しさん :03/10/26 19:04
EM_CHARFROMPOSでウィンドウサイズ(x=0, y=rc.bottom-rc.top)から最終行の文字番号取って、
EM_EXLINEFROMCHARで行番号を取得、
で良いと思われ。


345 名前:111 :03/10/26 20:52
いくら探しても他の手段が見つからない(うまく行かない)んで、
メモリ受け渡しに問題はないと勝手に納得しました。

とりあえず、諸悪の権化はdllでの
デバイスコンテキスト複数精製と仮定して、(ロックしてもだめだった)。
ひとつのデバイスコンテキストで全ての画像変形を
こなすことに決めました。

ところで、利用側のプログラムでdllのデバイスコンテキスト数を
制限される、と言うのはよくあることなんでしょうか?

346 名前:デフォルトの名無しさん :03/10/26 21:32
>111
VC使い何で、ボーランドのソースはよくわからんが、とりあえず
Globalメモリ操作関数、ちゃんと調べて使ってるか?

347 名前:デフォルトの名無しさん :03/10/27 01:40
HWND  hWnd;
HANDLE hProcess;
DWORD ProcessID, ExitCode;

 if((hWnd = FindWindow(NULL, "ExitWindow")) != NULL){
   if(GetWindowThreadProcessId(hWnd, &ProcessID) != 0){
     if((hProcess = OpenProcess(PROCESS_ALL_ACCESS, TRUE, ProcessID)) != NULL){
       if(GetExitCodeProcess(hProcess, &ExitCode)){
         ExitProcess(ExitCode);
        }
     }
   }
 }

このコードを実行した場合、"ExitWindow"のプロセスが終了するのではなく
自分自身のプロセスが終了してしまいます。何故でしょう?
"ExitWindow"のプロセスを終了させるにはどう書けば良いのでしょうか?

348 名前:デフォルトの名無しさん :03/10/27 02:32
>>347
TerminateProcess(hProcess, anyExitCode);

それはさておき、GetExitCodeProcess()が失敗したときってそもそも終了させられない気がするんだが。

349 名前:デフォルトの名無しさん :03/10/27 02:40
>348
Terminateヤバくない?
適当なメッセージ(WM_CLOSEとか?)を送って、
自主的に終了してもらうよう要請するのが、健全なアプリじゃないかな。

350 名前:デフォルトの名無しさん :03/10/27 03:18
他のアプリを正常に終了させたいときは
WM_QUERYENDSESSION + WM_ENDSESSION
だと思うが。Terminate*は最後の手段。

351 名前:111 :03/10/27 06:49
>>346
レスありがとうございます。
試行錯誤したところ、win98はxpに比べて、
ハンドルの寿命が早いと分かりました。
グローバル変数を増やして対処したいと思います。

では消えますんで。

352 名前:デフォルトの名無しさん :03/10/27 07:19
>>350
ENDSESSION系送っても終了するとは限らないと思うが。
Terminateが最後の手段なのは同意

353 名前:デフォルトの名無しさん :03/10/27 09:13
相手のプロセスハンドルをFindWindow()から手繰ってくるようなアプリだから
相手が自主的に終了してくれるのなんて当てにできないと思うのだが。

354 名前:デフォルトの名無しさん :03/10/27 16:53
それでもまずメッセージを送ってどうしても協調してくれないときだけ
最後の手段としてTerminateすべき。
ようするにタスクマネージャと同じだが

355 名前:347 :03/10/27 18:31
レスどうもです。

>>348
ヘルプには、TerminateProcessはなるべく使わずに
ExitProcessの方を使えと書いてあったのでExitの方を使ってました。
でも、ココで聞く前に自分でTerminateの方も試したのですがダメでしたね。

>>349
自分もWM_CLOSEメッセージを送って終了させる事は出来ていたのですが、
>>347に書いたコードがなぜ動かないのか分からなかったので質問しました。

>>350>>352
やはり終了させるのは、メッセージを送るのが良いようですね。

>>353
他に良いプロセスハンドルの取得方法は何かありますか?

356 名前:デフォルトの名無しさん :03/10/27 18:34
誰もハンドルの取得方法が悪いとは言っていないと思うが

357 名前:347 :03/10/27 18:39
>>356
いや… 他に良い方法があるのかな と思いまして。


358 名前:デフォルトの名無しさん :03/10/27 21:16
>347
何故動かないのか、は、とにかくExitProcess()の説明をよーく見ろ。

359 名前:347 :03/10/27 23:03
>>358
MSDNの説明だけではよく分かりません…
なぜだか教えて頂けませんか??

360 名前:デフォルトの名無しさん :03/10/27 23:05
>>359
ExitProcess は呼び出したプロセスを終了する API。


361 名前:347 :03/10/27 23:10
>>359
やっぱりそうでしたか…
引数にプロセスハンドルが無いので
どうやって識別するのかなと不思議に思ってました。
どうもです。


362 名前:347 :03/10/27 23:11
>>359 ×
>>360

363 名前:デフォルトの名無しさん :03/10/27 23:20
>>359
確かにMSDN見たら呼び出し元を終了するとは一言も書いて無いな。
引数にハンドルが無いことと、"Exit"という名前から普通はわかるもんだが。
しかも日本語訳がa processをご丁寧に1つのプロセスと訳してくれちゃってるのが問題だな。

364 名前:デフォルトの名無しさん :03/10/27 23:53
>>304
>>305
ありがとうございました。パスの追加はうまくいきました。
ただ即時にシステムに反映させるのがうまくいきませんでした。
SendMessageTimeoutでHWND_BROADCAST指定してみたんですが、WPARAMに何か必要だったのでしょうか?
今のところ強制ログオフさせることで回避しています。

365 名前:デフォルトの名無しさん :03/10/28 00:01
>>359
ワラタ

まあ書いてる本人が解ってないのを
読んで解れってのも原理的にシュールな話だな

366 名前:347 :03/10/28 00:13
MSDNのTerminateProcess()項にも
TerminateProcess()を使わずに、
なるべくExitProcess()の方を使うように
みたいな事が書いてましたので
完全に勘違いしてました…

367 名前:デフォルトの名無しさん :03/10/28 10:52
サービスAからアプリBを起動。
サービスAは自作。アプリBは自作ではないため修正不可。
ログオフしてもアプリBは起動したまま。
アプリBが死んだらサービスAがアプリBを再起動ではだめ。
アプリBはシャットダウンか、サービスA停止まで起動したまま。

こういうことってできますか?
外部プロセスからの、アプリBへのログオフイベントの抑止方法が
わかんないです。お願いします。

368 名前:デフォルトの名無しさん :03/10/28 11:17
>>367
MsgWaitForMultipleObjectsを使えば?

369 名前:デフォルトの名無しさん :03/10/28 12:07
>>367
親プロセスがコンソールイベントを無視に設定しておけば、
子プロセスに継承されるはず。

370 名前:デフォルトの名無しさん :03/10/28 12:57
数種類のビットマップを BitBlt で何度も描画したい時に、
毎回 SelectObject するのが面倒くさいので、各 HBITMAP 毎に
デバイスコンテキストを作成しておく、というのは
まともなやり方でしょうか?


371 名前:デフォルトの名無しさん :03/10/28 15:17
それってCreateCompatibleDCで作成したDCの話?

372 名前:デフォルトの名無しさん :03/10/28 15:30
>>364
2000のSP1だか2だか忘れたけど
システム環境変数の反映がうまくいかないバージョンがあった気がする
ログオフさせても問題ないならそれでいいんじゃない

373 名前:367 :03/10/28 16:14
>>368>>369
レスありがとうございます。

>>368
これは、アプリBへのログオフイベントを横取りして
捨てるってことでしょうか?
試してみます。


>369
サービスAの方で、
SetConsoleCtrlHandler(NULL, TRUE);
ってやってから、プロセス起動ってことでしょうか?
(全然見当ちがいだったらすまんです)
ためしにやってみたら、だめだった。
イベント無視は引き継いでるんですが、アプリBの方で
コンソールイベントの処理があるようです。
(アプリBをnotepad.exeでためしてみたらnotepadは起動しっぱなし
になりました)


374 名前:デフォルトの名無しさん :03/10/28 16:50
Admin 権限を持っているユーザにのみ実行が許されるソフトを書こうとしています。
プログラムの頭でユーザが Admin 権限を持っているかどうかをチェックしたいです。

IsUserAnAdmin に拠らずに別の方法で Admin 権限の確認を取る方法はありますか?


375 名前:デフォルトの名無しさん :03/10/28 17:09
IEでマウスのホイールボタンをクリックすしてスクロールさせる方法を、
Win32APIのmouse_eventを使ってやりたいのですが、
どのような引数を渡してあげればいいでしょうか?

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpwinui/html/_win32_mouse_event.asp

MSDN見ても特に記述が無いのですが・・・

376 名前:デフォルトの名無しさん :03/10/28 19:18
mouse_event(MOUSEEVENTF_MIDDLEDOWN, 0,0,0,NULL);
mouse_event(MOUSEEVENTF_MIDDLEUP, 0,0,0,NULL);

377 名前:名無し@沢村 :03/10/28 20:22
リッチエディットで特定の予約語だけ色づけするにはどうすればいいですか?

378 名前:367 :03/10/28 20:28
>>368
これってアプリBへのログオフイベントを検出できても
横取りできずにプロセス終了してしまうんじゃないでしょうか?


379 名前:名無し@沢村 :03/10/28 20:36
リッチエディットで、キャレットの置かれている行と列をステータスバーに表示したいんですが、
case WM_NOTIFY:
lpN = (LPNMHDR)lParam;
switch (lpN->code ) {
case EN_SELCHANGE:
のタイミングでステータスバーに行と列を表示すると、文字を選択していってマウスを話したタイミングでしか表示されません。
文字を選択してマウスをドラッグしていくと、リアルタイムで行と列が変化するようにしたいんですが、
case EN_MSGFILTER:
pmf = (MSGFILTER *)lParam;
if (pmf->msg == WM_MOUSEMOVE)
のタイミングでステータスバーに行と列を表示しようとしてもうまくいきません。
どうすればいいですか?

380 名前:デフォルトの名無しさん :03/10/28 21:14
>>379
沢村っぽくないぞ

381 名前:375 :03/10/28 21:50
>>376
駄目でした・・・
MIDDLEボタンではないのでは?

382 名前:ataraw :03/10/28 22:48
ファイナルデータやフリーソフトの復元はハードディスクにまだ生きてるファイルを探しますが、そういうのを操作するAPIってあるんですか?
それともアセンブラを使って直接ハードを制御するのですか?

383 名前:デフォルトの名無しさん :03/10/28 23:00
DeviceIoControl・・・・かも

384 名前:デフォルトの名無しさん :03/10/28 23:13
>>374
あります。

385 名前:デフォルトの名無しさん :03/10/28 23:27
VCで作ったDLLをASP(VBScript)から直接呼び出すことは出来ますか?
ASPでAPIを使うときってレジストリに登録されてないと呼び出せませんよね?
VCのDLLはレジストリに登録できないし。
(regsvr32では出来ませんでした)

VCでATL(COM)で作り直すしかないんですかね?


386 名前:デフォルトの名無しさん :03/10/28 23:28
あげ

387 名前:デフォルトの名無しさん :03/10/28 23:30
http://jbbs.shitaraba.com/news/1370/

388 名前:デフォルトの名無しさん :03/10/29 00:22
WinFX API
ttp://pc.watch.impress.co.jp/docs/2003/1029/pdc01.htm

数年後(数ヵ月後?)には WinFX API 質問箱ってのが立ってるんだろうなぁ〜
とか思いつつ、すれ違いなので sage てみる今日この頃。

389 名前:デフォルトの名無しさん :03/10/29 01:18
初めまして。
ネットのhtmlファイルを取得するためにURLDownloadToFileがあることはわかりました。
ところがこれはファイルを保存しなければいけない模様です。

当方は複数のhtmlファイルのソースがわかればいいので
いちいち保存はしたくないのですがなんかいい方法はないでしょうか?
VB6を使用しているのでWebBrowserコンポーネントなども使ったのですが
オリジナルのソースは取得できませんでした。

390 名前:デフォルトの名無しさん :03/10/29 01:21
>>389
WinSock及びWinSock系ライブラリで余裕。


391 名前:デフォルトの名無しさん :03/10/29 01:43
ふつー、その程度ならWinInetだろ。

392 名前:デフォルトの名無しさん :03/10/29 04:25
>>388
確かにスレ違いだが、このAPIがDLLベースなのか否かが気になる所。
オブジェクト指向OSとなるらしいが、オブジェクト指向では無い言語は
切り捨てなのかも気になる。
まあ、過去資産はエミュレータ上で動かせと言う事なのか。

393 名前:デフォルトの名無しさん :03/10/29 05:02
Win32API質問箱でWinFXの質問をしたりその逆だったりで「スレ違いだ!」と言われる初心者も出てくるわけだ

394 名前:デフォルトの名無しさん :03/10/29 07:38
GDI+の立場っていったい、、

395 名前:デフォルトの名無しさん :03/10/29 09:17
マウスポインタが砂時計状態か否かを判定することはできますか?

396 名前:x :03/10/29 09:36
WindowsXPの複数モニタ環境にて、セカンダリモニタを
(まずは手動で)Disableするツールを作りたいのですが、
どの辺のAPIを使ったらよいのでしょう?
どなたかヒントをください。

397 名前:デフォルトの名無しさん :03/10/29 09:53
http://longhorn.msdn.microsoft.com/lhsdk/port_lhsdk_home.aspx
ここ見るとWinFXはWin32APIの次期版というよりも、.NETとWin32APIを含んだものみたいだけどどうなん?
両者を総称してWinFXってこと?

398 名前:デフォルトの名無しさん :03/10/29 10:02
つまりWinFXが入ったPCを、PC-FXと呼ぼうというわけだな

399 名前:デフォルトの名無しさん :03/10/29 10:14
MFCみたいな構成だったら非常に萎え

400 名前:デフォルトの名無しさん :03/10/29 11:04
なんかWinFXで新スレ立てたい勢いだけど…
>>397の右上に言語の選択ボックスがあって.NET対応言語しか出てないんだよね。
一応本文には依然としてunmanagedも有効だ、みたいなこと書いてあるけど。
>>388みる限り構成としては.NETっぽい階層なんだろうか。
WinFXクラス階層みたいのがあって、そのクラス経由でmanagedとunmanagedが使えるってことなのかな。
よくわからないよ…

401 名前:デフォルトの名無しさん :03/10/29 11:21
システムコール>低レベルAPI>高レベルAPI>クラスライブラリ(仮想マシン)
という階層構造そのものは変化しないが、この先x86、IA-64、x64(だっけ)と対応
CPUが増えてくるからネイティブは推奨しないって程度じゃないのか?

402 名前:デフォルトの名無しさん :03/10/29 11:24
WinFXのオブジェクト図ポスターをはっきり見たい

403 名前:デフォルトの名無しさん :03/10/29 11:27
Longhorn SDK で遊んでる猛者はおりませんのんか

404 名前:デフォルトの名無しさん :03/10/29 11:44
じゃあWin32APIと.NETライブラリを新しくして、あわせてWinFXって呼ぼうってだけの話か?
中身は新APIとそれをラップする.NETライブラリだと。
それならそうと早く言ってくれよー。
てっきりAPIと.NETを包含するWinFXっていうまったく新しいクラスライブラリでもできるのかと思ったよ。

405 名前:デフォルトの名無しさん :03/10/29 12:51
Win32と.NETの混合というより、Win32を.NETに移植したって感じかな。

406 名前:デフォルトの名無しさん :03/10/29 12:58
Win32APIを大幅に変更し、それらのAPIをサポートするように.NETクラスライブラリを拡張しました、
とかの方がわかりやすいのにな。
WinFXなんて新しい単語作らなくても。

407 名前:デフォルトの名無しさん :03/10/29 13:05
API名がCreateFileFXみたいになんじゃねーの

408 名前:デフォルトの名無しさん :03/10/29 13:18
Win32APIとWinFXの混在コードが可能なのかな。
可能なら>>407もあり得なくも無いところが恐い。

409 名前:デフォルトの名無しさん :03/10/29 13:30
昔ゲームで「○○システム」と付けるのが流行った時期があった。
大して違わないモノに別の名前付けるのもそーゆーノリじゃねーの?

410 名前:デフォルトの名無しさん :03/10/29 13:38
まぁMSはやたらActiveってつけたり.NETってつけたりするのが好きだからな

411 名前:デフォルトの名無しさん :03/10/29 13:42
【お題】 ところでFXってなんかの略か?

412 名前:デフォルトの名無しさん :03/10/29 13:47
とりあえずLonghornSDKのサイト見ても.NET一色なのでこのスレ的にはこれ以上大して盛り上がらんか。

413 名前:デフォルトの名無しさん :03/10/29 14:05
http://www.zdnet.co.jp/news/0310/29/nj00_winfx.html
これがちょっとわかりやすかな。

414 名前:デフォルトの名無しさん :03/10/29 14:13
あ、Win32APIを元に考えるから混乱するのか。
Win16→Win32→WinFXってわけね。
Win32APIも.NETもWin32だもんな。
それが次の新Win32APIと新.NETでWinFXになるってことか。

415 名前:デフォルトの名無しさん :03/10/29 14:13
Avaron で .NET の form じゃない部分(従来は GDI でシコシコやってたとこ) は
xml ベースの dom になってるっぽい感じですね。。。

416 名前:デフォルトの名無しさん :03/10/29 14:33
http://www.zdnet.co.jp/news/0310/29/l_avalon.jpg
この図見るとGDI/GDI+もそのまんまあるね

417 名前:デフォルトの名無しさん :03/10/29 14:44
>>416
多分 GDI/GDI++ や Direct3D Graphics を通してその下にある HAL にアクセスする、って言う意味なんじゃないかな。
既存のアプリは動くようにするそうだからどっちにしろインターフェイスとしての GDI は残すと思うよ。

418 名前:デフォルトの名無しさん :03/10/29 14:49
http://www.zdnet.co.jp/news/0310/29/l_winfx.jpg
これ見るとWinFX=.NETクラスライブラリだと思ってしまうけどどうなの。
Win32APIに相当する WinFX API ってのは公開されないわけ?

419 名前:デフォルトの名無しさん :03/10/29 14:58
なぜ Microsoft.WinFX ではなく System 名前空間を使ったのか問い詰めたい。

420 名前:デフォルトの名無しさん :03/10/29 17:34
プロセスIDから実行時のコマンドラインを得るにはどうすればいいですか?
小一時間ググッてるんですが、見つからない…

421 名前:デフォルトの名無しさん :03/10/29 17:40
OpenProcess>CreateRemoteThread>GetStartupInfoかな

422 名前:420 :03/10/29 17:47
>421
蟻がd。調べてみます。

423 名前:420 :03/10/29 19:07
STARTUPINFOにコマンドライン系のデータがない…
_| ̄|○

424 名前:デフォルトの名無しさん :03/10/29 19:32
>>398
>>399
>>404
ワロタ

425 名前:420 :03/10/29 19:48
そうか
OpenProcess>CreateRemoteThread>getCommandLine
これでいけるのかな

426 名前:420 :03/10/29 20:38
HANDLE pHandle = OpenProcess(PROCESS_CREATE_THREAD, FALSE, PID);
if(pHandle == NULL){
 return TRUE;
}
char cmdLine[_MAX_PATH + 256];
DWORD threadId;
HANDLE threadHandle = CreateRemoteThread(pHandle, NULL, 0, ThreadProc, cmdLine, 0, &threadId);


アクセスが拒否されました。 だって、…

427 名前:デフォルトの名無しさん :03/10/29 21:28
【質問】
DBxSTANDなどでプロセスを選択すると、そのプロセスが使用しているメモリ領域が分かりま
すが、他のプロセスが使用しているメモリ領域を取得するにはどうすればよいのでしょうか?

【できていること】
このスレを見てOpenProcess、ReadProcessMemoryなどは上手くいった。
(ReadProcessMemoryのアドレスはDBxSTANDのアドレスを手動で入力した。)

【やってみたこと】
方向違いかもしれませんが・・・
1.GetProcessMemoryInfoを使おうと思ったが上手くいかなかった。
 そのまま単にGetProcessMemoryInfo使おうとするとコンパイルエラー。
 プロジェクトのディレクトリにpsapi.hを作ると(MSDNのソースそのままコピー)
 コンパイルは通るが、リンクのときに
  CSpy.obj : error LNK2001: 外部シンボル "_GetProcessMemoryInfo@12"
                                        は未解決です。
 と怒られる。

こんな所で挫折しています。

428 名前:427 :03/10/29 21:33
ちょっと分かりにくい表現だったので補足します。
「他のプロセスが使用しているメモリ領域」とは、
そのプロセス見えのアドレスが分かればいいです。
たとえば 0x00400000番地〜0x0040CFFF番地を使用しているなど。

429 名前:デフォルトの名無しさん :03/10/29 21:38
>>427
MSDNのGetProcessMemoryInfoの説明の下にヘッダファイルだけじゃなくてインポートライブラリが書いてあるでしょ。
それリンクして。
今後他のAPI使う時も同じね。

430 名前:デフォルトの名無しさん :03/10/29 22:32
結果として開発者は,Longhorn向けのアプリケーションを記述する場合に,
Win32と.NET Framework,およびWinFXの三つのAPIから選択しなければならない。
Allchin氏は,Win32および.NET FrameworkのAPIを使った既存のアプリケーションは
Longhornで動作することを保証した。WinFXはカバー範囲が.NET Frameworkよりも
広く,WinFXでなければ実現できないものもある。一方Win32で事足りる
アプリケーションであってもWinFXを使えば,「新しいAPIではアプリケーションの
インストール時に再起動する必要を取り除く努力をしている」

http://itpro.nikkeibp.co.jp/free/NBY/NEWS/20031028/2/

結局Win32もめでたく残る、と。
おまえら、生き残りましたよ。

431 名前:デフォルトの名無しさん :03/10/29 22:42
SUN と違って MS はレガシー API / ABI をそう簡単に切り捨てないでしょ。
いまだに Win16 のアプリだって動くし。。

432 名前:デフォルトの名無しさん :03/10/29 22:51
もしかしてWinFX使ったら2k、XPで動かない?
だったら誰も使いそうにないな。

433 名前:デフォルトの名無しさん :03/10/29 22:55
動くわけ無いジャン

434 名前:420 :03/10/29 22:57
>426
何でこれでアクセスが拒否されるのでしょうか?

435 名前:デフォルトの名無しさん :03/10/29 23:01
おー、>>430が一番わかりやすい解説だ。

436 名前:427 :03/10/29 23:06
>>429
psapi.lib(サンプルの中にあったんですね)をリンクしたら通りました。
どうもありがとう。
果たして方向性はあっているのだろうか・・・・

437 名前:デフォルトの名無しさん :03/10/29 23:07
>>430
典型的な上位互換OSとなるわけだな。無問題。

438 名前:デフォルトの名無しさん :03/10/29 23:07
3つから選択ってあるけど実質2つだよね。WinFXも on .NETなわけだから。

439 名前:デフォルトの名無しさん :03/10/29 23:11
>>436
ちなみにpsapi.dllはNT系にしかないから配布したりするアプリなら注意な

440 名前:デフォルトの名無しさん :03/10/29 23:21
>>438
ですね。

> WinFxはLonghornのメインAPIになる。これまでの.NET Frameworkに,
> (1)画面描画機構「Avalon(開発コード名)」,
> (2)データベースを使ったファイル・システム「WinFS(同)」,
> (3)そしてWebサービス用の非同期通信機能「Indigo(同)」を
> 新機能として追加する。

441 名前:427 :03/10/29 23:22
>>439
静的にリンクしました。
後、GetProcessMemoryInfoはとりあえず動作しました。
が、しかし・・・・
もうちょっと見てみます。

442 名前:デフォルトの名無しさん :03/10/29 23:25
やっぱ用語変えただけかー。数時間踊らされた。

443 名前:427 :03/10/30 00:35
GetProcessMemoryInfoで一応、いろんな値が取り出せたのですが、
どうも欲しい値との関連性が見出せないので、ひょっとして方向違い?

ということで別の関数を探すとGetWindowLong見たいなのがあったので、
IndexにGWL_HINSTANCEをセットして先頭アドレスを取得。
最終アドレスは取得方法が良く分からなかったため、
「先頭アドレスからReadProcessMemoryで取得できなくなるまで探す」
という路線で解決しました。

尚、最終アドレスをパッと取得できる方法は引き続き募集中です。

444 名前:デフォルトの名無しさん :03/10/30 01:17
>>372
WPARAMに"Environment"とだけいれたらうまくいきました。
レジストリキーの名前を全部入れてたのが敗因だったようです。

445 名前:デフォルトの名無しさん :03/10/30 01:24
>>443
VirtualQueryEx

446 名前:デフォルトの名無しさん :03/10/30 04:43
>>420
CreateRemoteThreadするまえに
対象プロセスをsuspendにしなくていいの?

447 名前:名無し@沢村 :03/10/30 08:56
>>66
改行の仕方を教えて下さい!
\nで上手く改行できませんでした。
>>67
Windowsの改行って何だったっけ?
>>68
\r\n
>>69
上手くいきました。ありがとうございました。


プッ

448 名前:デフォルトの名無しさん :03/10/30 15:54
>>447
そんな前の書き込み掘り起こしてどうすんだよ・・・。

449 名前:デフォルトの名無しさん :03/10/30 16:43
http://itpro.nikkeibp.co.jp/free/NBY/NEWS/20031028/2/

> WinFxはLonghornのメインAPIになる。これまでの.NET Frameworkに,
> (1)画面描画機構「Avalon(開発コード名)」,
> (2)データベースを使ったファイル・システム「WinFS(同)」,
> (3)そしてWebサービス用の非同期通信機能「Indigo(同)」を
> 新機能として追加する。

別に.NETは.NETのままなんだね。

450 名前:デフォルトの名無しさん :03/10/30 16:49
http://pc.watch.impress.co.jp/docs/2003/1030/pdc02.htm
そう簡単な話でもないらしい。

451 名前:デフォルトの名無しさん :03/10/30 17:04
【WinFX】次世代Windows Longhornを語るスレ
http://pc2.2ch.net/test/read.cgi/tech/1067489881/

FX関係はこちらへどうぞおこしやす。

452 名前:427 :03/10/30 21:05
>>445
下記の手順でで上手くいきました。
m_EndAdr = m_InstanceHandle
iInfo.RegionSize = 0;
while(iInfo.AllocationProtect != 0) {
  m_EndAdr += iInfo.RegionSize;
  VirtualQueryEx(m_hProc, (LPCVOID)(m_EndAdr), &iInfo, sizeof(iInfo));
}
m_EndAdr--;
どうもありがとう。

453 名前:427 :03/10/30 21:34
ごめんなさい。嘘がありました(たまたま動いてはいるけど)。
正しくは下記です。
m_EndAdr = m_InstanceHandle;
iInfo.RegionSize = 0;
do {
  m_EndAdr += iInfo.RegionSize;
  VirtualQueryEx(m_hProc, (LPCVOID)(m_EndAdr), &iInfo, sizeof(iInfo));
} while(iInfo.AllocationProtect);
m_EndAdr--;

454 名前:デフォルトの名無しさん :03/10/30 22:42
質問です。
Windows2000から、ディスクにはBasicとDynamicという種類がありますよね?
これを判別できる方法を、どなたかご存知ないでしょうか?
どうか、よろしくお願いします。

455 名前:デフォルトの名無しさん :03/10/30 23:48
LFNがitteyoshi.txtでSFNがITTEYO~1.TXTのファイルがあるフォルダに
ITTEYO~1.TXTをコマンドプロンプトからコピーしようとすると
上書きの警告が表示されますが、エクスプローラからコピーすると
何事もなくコピーが終了して、しかも勝手にitteyoshi.txtのSFNが
変えられています。
これってどうやってるんでしょうか? 隠しAPI?

456 名前:デフォルトの名無しさん :03/10/31 00:02
MSDNでAPIのリファレンスを英語と日本語で見たいのですが、
どうやって検索するのでしょうか?
http://search.microsoft.com/japan/
だと全然ヒットしないです。


457 名前:デフォルトの名無しさん :03/10/31 00:12
http://www.microsoft.com/japan/msdn/library/default.asp
http://msdn.microsoft.com/library/default.asp
ここで検索。

しかし、googleで検索したほうがhit分かりやすい罠
'API名 site:microsoft.com'

458 名前:デフォルトの名無しさん :03/10/31 00:14
Googleで引く

459 名前:デフォルトの名無しさん :03/10/31 00:17
>>456
ttp://www.microsoft.com/japan/msdn/library/default.asp
ここを見ると左のMSDN ライブラリが開けないので無理では?
昔はできてた気がするけどやり方違うのかな。

460 名前:456 :03/10/31 00:37
レスありがとうございます。Googleが良いですね。

http://www.microsoft.com/japan/msdn/library/default.asp
で CreateWindowEx を検索すると、
http://search.microsoft.com/search/results.aspx?st=b&qu=CreateWindowEx&view=ja-jp
になって見つからないのに、
http://www.google.com/search?q=CreateWindowEx+site%3Amicrosoft.com
だと英語も日本語もヒットしました。

英語版MSDNは
http://search.microsoft.com/search/results.aspx?View=msdn&st=a&qu=CreateWindowEx&c=4&s=2
でヒットしました。

461 名前:デフォルトの名無しさん :03/10/31 08:27
VC++6.0のAppWizardで開発してます。
winsockで非同期処理をする為にWSAAsyncSelectを
下記のように使っているのですが上手くいきません。

WSAAsyncSelect(Socket,m_hWnd, WM_ACCEPT,FD_ACCEPT);

Viewクラス内で処理しています。
受け取ったメッセージはDefWindowProcで処理しています。
恐らくウインドウハンドルが正しく指定されていないと思うのですが、
どのように指定すればいいのでしょうか?



462 名前:デフォルトの名無しさん :03/10/31 20:20
>>455
itteyoshi.txt (ITTEYO~1.TXT)を適当な名前tmpにリネーム

ITTEYO~1.TXTをコピー

tmpを itteyoshi.txt にリネームし itteyoshi.txt (ITTEYO~2.TXT) になる

だったかな。filemon.exe なんかで調べると何やってるかわかるよ。

463 名前:デフォルトの名無しさん :03/10/31 20:40
[test]
test=1

上のiniファイルのエントリーをGetPrivateProfileInt()で読み込んだ後
iniファイルを手動で下の様に編集して、

[test]
test=0

再度、GetPrivateProfileInt()で読み込んでも
0が帰って来ないで1が帰ってきます…
最初のGetPrivateProfileInt()の時に
別のテンポラリファイルでも作ってるのでしょうか?

464 名前:デフォルトの名無しさん :03/11/01 03:48
C最高
age

465 名前:デフォルトの名無しさん :03/11/01 04:16
>463
ファイルアクセスで速度が落ちないようにキャッシュしているのでは。


DDEで起動してるVS.NET 2003にcppファイルとかを表示させたいんだけど、成功した人いる?
IEとかのDDEは目的どおり動くんだけど、VSは::DdeClientTransaction()がNULLを返してくる。
しかも::DdeGetLastError()は0を返してくるから原因がわからず。
何がまずいのかなぁ。


466 名前:デフォルトの名無しさん :03/11/01 16:04
>>463
Windows9x系の場合は、iniファイルのキャッシュが働いてるのかも。
途中で、
WritePrivateProfileString(NULL, NULL, NULL, iniファイル名);
を実行すれば、キャッシュがフラッシュされる。


467 名前:デフォルトの名無しさん :03/11/01 16:17
共有ファイルを、CreateFileでオープンできるのは分かったんだが、
その共有ファイルに、パスワードを設定してある場合、
どうやってオープンしたらいいですか?
SECULITY_ATTLIBUTESを使うかと思ったんですが、解説読んでも
良く分からないんで。

468 名前:463 :03/11/01 18:34
>>465
やはりメモリにキャッシュしているようですね。

>>466
環境書いてなかったですが、その通りWin98SEでこうなります。
言われた通りにWritePrivateProfileString()で一旦キャッシュをフラッシュしてから読み込むようにします。

ありがとうございました。

469 名前:デフォルトの名無しさん :03/11/01 18:47
>>467
共有ファイルにパスワード ?
OS とファイルシステムを書いてくれ。

> SECULITY_ATTLIBUTES

SECURITY_ATTRIBUTES のことか ?

470 名前:デフォルトの名無しさん :03/11/01 19:14
>469
OS:Windows95シリーズ
ファイルシステム:FAT32

471 名前:デフォルトの名無しさん :03/11/01 19:58
95でFATってファイルにパスワードかけられたっけ?

472 名前:デフォルトの名無しさん :03/11/01 20:32
無理じゃと思う。

473 名前:デフォルトの名無しさん :03/11/01 20:34
ファイルじゃなくて、リモート端末だったりして。

474 名前:デフォルトの名無しさん :03/11/01 21:08
WinSockのDLLの、Cソースはオープンじゃないの?

475 名前:デフォルトの名無しさん :03/11/01 21:32
つーか、どっかで入手できるのか ?

476 名前:デフォルトの名無しさん :03/11/01 21:46
半自己解決
IEのDDEはREQUESTでも動いて、VSのはEXECUTEじゃないと動かないのね。
でもリリースだとVSに「パラメータが間違っています。」と怒られて実行不可。
デバッグで動くからわけがわからん。

477 名前:デフォルトの名無しさん :03/11/01 22:19
単純に"があるかないかだった。吊ってくる。

478 名前:デフォルトの名無しさん :03/11/02 02:07
質問です。
コンソールアプリでキー入力がされるまで待機したいのですが、
以下のコードではうまくいきません。

HANDLE hStdIn;
hStdIn = GetStdHandle(STD_INPUT_HANDLE);
if(INVALID_HANDLE_VALUE != hStdIn)
WaitForSingleObject(hStdIn, INFINITE);

キー入力をしなくてもWaitForSingleObject()がWAIT_OBJECT_0を返して
抜けてしまいます。GetStdHandle()ではなくCreateFile()も試しましたが駄目でした。
何がまずいのでしょうか?

479 名前:デフォルトの名無しさん :03/11/02 03:00
ReadConsoleInput

480 名前:478 :03/11/02 03:12
>479
WaitForMultipleObjects()等を使って他のイベントと同時に待機しようとしています。
質問がおかしかったですね。すみません。

481 名前:デフォルトの名無しさん :03/11/02 05:58
ダイアログでスライダー(トラックバー)を使おうと思ったんですが
値の取得や設定はどのようにすればいいでしょうか。
サンプルを探しても、MFCだったり.NETだったりと。
使い方が良く判りません。他のダイアログのコントロールも使いたいと
考えているのですが、調べ方なども一緒に教えていただけませんか?

482 名前:481 :03/11/02 06:26
もしや、MFCじゃないと使えないですか?

483 名前:デフォルトの名無しさん :03/11/02 06:31
ドローソフトなんかによくあるラバーバンド(蟻の行進?)を実装したいのですが、
HDCに対してHPENでXOR描画って出来ないんでしょうか?
#DrawFocusRectだと点滅処理が出来なさそう。

484 名前:481 :03/11/02 06:40
やった事ないけどGetDlgItemでいけるんでないの?

485 名前:481 :03/11/02 07:08
>>484
すんません、それでハンドル取得してどうすりゃいいんでしょう?

486 名前:デフォルトの名無しさん :03/11/02 07:12
>>2を参照しる

487 名前:467 :03/11/02 10:43
なーんだ。誰も答えてねーじゃん。
パスワードって、共有ファイルでパスワードを設定できんのは、フォルダ単位だろが。
しょうがねーから必要なときに自分でいろいろやってみるわ。
分かっても教えてやんね

488 名前:デフォルトの名無しさん :03/11/02 11:00
>>487
大丈夫。あんたが教えるまでもなく自力で調べられる奴か
教わっても分からない香具師か、どっちかしかいないだろうから。

489 名前:467 :03/11/02 11:03
ツマンネ

490 名前:デフォルトの名無しさん :03/11/02 11:06
>>483
私もそれ知りたい。
旧VBだと簡単にできるんだがあれはどうやってるんだろう。

やっぱり自分で線分上の座標計算して色取得してXORとってプロットする
コード書かないとだめなのか。

491 名前:デフォルトの名無しさん :03/11/02 11:07
>481
http://www.kumei.ne.jp/c_lang/sdk2/sdk_190.htm
ここに載ってるじゃん!

492 名前:デフォルトの名無しさん :03/11/02 11:09
>>488
厨にかまうなよ。

493 名前:デフォルトの名無しさん :03/11/02 12:04
当方マカで申し訳ないのですが、ラバーハンドというのはいわゆる投げ縄ツールのことでしょうか。
それならば、領域をXORで描画しながら、一定時間毎にペンのパターンを変えていくことで実現できますよ。


494 名前:デフォルトの名無しさん :03/11/02 12:10
>>493
領域内じゃなくて囲んだ線だけがウニウニするやつ。

495 名前:デフォルトの名無しさん :03/11/02 13:10
あれは白黒斜め縞のペンでひたすら線を書いてるだけだと思うが。

496 名前:デフォルトの名無しさん :03/11/02 13:23
>>493
×ラバーハンド
○ラバーバンド

輪ゴム処理やね。投げ縄ツール(ラッソ?)というよりも、普通のセレクションツールのイメージかな。

497 名前:デフォルトの名無しさん :03/11/02 17:55
>>483,490
どっちか1だろ

498 名前:デフォルトの名無しさん :03/11/02 19:15
Windowsの終了ダイアログで、Ctrl+Alt+Shiftキー押しながらキャンセルすると
explorerが終了し、そのままになってシェル拡張DLLのデバッグなんかが出来る
ようになりますよね。

シャットダウン/ログオフ系のAPIか何か使って、同じことできるんでしょうか?
(さもなきゃ keybd_eventで強引に...)

499 名前:デフォルトの名無しさん :03/11/02 21:30
>>498
シェル拡張のデバッグ方法とか知らんので外してるかも
しれないけど。
ログオン状態でexplorer.exeに居てほしくないなら、
レジストリでshell書き換えればそういう状態になるよ。

500 名前:481 :03/11/03 05:42
>>491
あ、どうも。>>486に言われて過去ログを6つくらいさかのぼったら
トラックバー関連にぶちあたって、メッセージがTBM_〜であることが
わかったので、そこから自力で調べてました。

.NETだとSliderとしか書いてないので、検索してもほとんど出てこなくて
ウツでした。 みなさん、ヘルプはすみずみまで目を通してるんでしょうかねぇ。




■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.