Win32API質問箱 Build14
- 1 名前: ◆ncKvmqq0Bs :03/10/05 13:33
- .NET Framework!? 知らんな!!
そんなヤル気のあるネィティブプログラマ集まれ!
スレ立てるまでもない、Win32APIについての質問はこちらへどうぞ。
やさしい にいさま達がきっと答えてくれる(ハズ)。
でも、質問する前に検索ぐらい汁!!
過去スレ・参考は>>2 ぐらいを参照するべし。
- 2 名前: ◆ncKvmqq0Bs :03/10/05 13:34
- - 過去スレ
Build13:http://pc2.2ch.net/test/read.cgi/tech/1059549320/
Build12:http://pc2.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:http://pc2.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:http://pc2.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:http://pc2.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:http://pc2.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:http://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:http://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:http://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:http://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:http://pc.2ch.net/tech/kako/991/991576947.html
- MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/index.html
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
- 3 名前:デフォルトの名無しさん :03/10/05 14:11
- >>1 オツ─wwヘ√レvv〜(゚∀゚)─wwヘ√レvv〜─ !!
- 4 名前:デフォルトの名無しさん :03/10/05 14:32
- 前スレ995より:
--------------------------------------------------------------------------------
ShellExecuteという関数を使って
関連付けがなされているファイルを
起動できると聞きました
プログラム中にwindows.hがIncludeされていて
windows.hの中にshellapi.hがIncludeされています
shellapiの中に
SHSTDAPI_(HINSTANCE) ShellExecuteA(HWND hwnd, LPCSTR lpOperation, LPCSTR lpFile, LPCSTR lpParameters, LPCSTR lpDirectory, INT nShowCmd);
#define ShellExecute ShellExecuteA
と書かれていてぐぐって見たのですが
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shellexecute.asp
くらいしかなくどうやって使ったらいいかわかりません
具体的にはC:\testフォルダの中のaaa.xlsを指定すると
エクセルが立ち上がってaaa.xlsが読み込まれるというようにしたいです
windows2000+BCC551です
どうかよろしくお願いします
--------------------------------------------------------------------------------
だそうな。マルチでなければ誰か面倒見てやってくれ
- 5 名前:前スレ995 :03/10/05 15:08
- 自己解決しました
がネットワーク上のファイルを指定すると
サーバに登録されていないユーザの為
アクセス拒否されます
プログラムソースにユーザ−IDとPASSを書いておいて
接続してからというやり方は出来ないものでしょうか
- 6 名前:前スレ981 :03/10/05 16:24
- 前スレ>>990
テキストファイルなんかの表示ならわかるのですが・・・。
よろしくお願いします。
- 7 名前:デフォルトの名無しさん :03/10/05 16:36
- >>6
ええっ、じゃあ絵の描き方から説明が必要なのかな煤i゚Д゚;
1、ウィンドウを作成
2、WM_PAINTメッセージを受けてクライアント領域に絵を表示
3、絵を書きたいタイミングにInvalidateRectを発行して再描画
辺りから始めてみてはどうでしょう。
描きたい絵は、BYTE buf[width*height*4]とか確保して
ベタデータで絵を描いたら、上記2の箇所で
SetDIBitsToDeviceを呼び出してHDCへ描画すれば絵が描けます。
- 8 名前:デフォルトの名無しさん :03/10/05 17:00
- >>6
テンプレにある猫でも(ry見に行けば勉強になると思うよ。
>>7
StretchDIBitsも(・∀・)イイ
- 9 名前:デフォルトの名無しさん :03/10/05 18:11
- モニターの電源をOn/OffするAPIってなんでしょう?
- 10 名前:デフォルトの名無しさん :03/10/05 18:12
- >>5 携帯からだから記憶テキトーだけど、WNetAddConnection2 とか?
- 11 名前:デフォルトの名無しさん :03/10/05 18:38
- >>9
すみません自己解決しました.
SendMessage(hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
これでON.
SendMessage(hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
これでOFF.
これで実現できました
- 12 名前:デフォルトの名無しさん :03/10/05 18:39
- >>9
間違えました
SendMessage(hwnd, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_ON);
これでONです
- 13 名前:デフォルトの名無しさん :03/10/05 18:49
- SendMessageについて質問があります。
1文字だけあるウィンドウに送ろうとしたときに
SendMessage(hWnd, WM_CHAR, Asc("a"), 0)
だとうまくメッセージを受信できるのですが、
以下のように、2バイト文字にすると
SendMessage(hWnd, WM_CHAR, Asc("亜"), 0)
文字化けしてうまく受信できません。
どうしたらうまく送信できるのでしょうか?
よろしくお願いいたします。
言語はVBです。
- 14 名前:デフォルトの名無しさん :03/10/05 18:56
- ASC("亜")でなにが返ってくるの?
0x88きゃ?
- 15 名前:デフォルトの名無しさん :03/10/05 18:59
- >>13
Asc()はascii文字セット専用だからでは?
shift-jisには対応できてないから文字化けするんだと思うけど。
- 16 名前:デフォルトの名無しさん :03/10/05 19:00
- >>14
戻り値を16進に変換したら889Fと帰ってきました。
- 17 名前:デフォルトの名無しさん :03/10/05 19:03
- >>15
なるほど・・・。
shift-jisに対応するAscに変わる関数というのは
存在するものなのでしょうか?
- 18 名前:デフォルトの名無しさん :03/10/05 19:05
- というか問題はWM_CHARでないのか?
889FはShift-JISの"亜"でそ
- 19 名前:デフォルトの名無しさん :03/10/05 19:13
- すこし状況を説明しますと
すでにC++で書かれたソースがあって
それを元にVBに落としているところなのです。
そのサンプルソースが
LPCSTR pString = InputView->Lines->GetText();
if(pString[0])
{
for(i=0;pString[i];i++)
SendMessage(hWnd,WM_CHAR,(UCHAR)pString[i],0);
PostMessage(hWnd,WM_KEYDOWN,'\r',0);
m_pHistory->AddString(pString);
}
このような感じになっていまして
それでWM_CHARをそのまま使ってしまったのです。
上記のソースは問題なく2バイト文字も送信できています。
- 20 名前:デフォルトの名無しさん :03/10/05 19:26
- >>19
受け側でどう化けてるのか調べるのが手っ取り早いと思うけど。
思いつきだけど、0x889Fじゃなくて0x9F88で受信してるとか?
- 21 名前:デフォルトの名無しさん :03/10/05 19:50
- >>20
受け側はすでに完成されたプログラムでコードまで
判別できないのですが「 」とか「・」が表示されています。
ネットで、【5.本日のお題 WM_CHAR による2バイト文字取得サンプル】
procedure THoge.WMChar(var Message: TWMKey);
var
CH, CL: Char;
M: TMsg;
S: String;
begin
if Message.CharCode in [$20..$7E, $A0..$FF] then
// 1バイト文字
S := Chr(Message.CharCode)
else
begin
// 2バイト文字
CH := Chr(Message.CharCode);
if (CH in LeadBytes) and
PeekMessage(M, Handle, 0, 0, PM_NOREMOVE) and
(M.Message = WM_CHAR) and
(M.wParam in [$40..$FF]) and
PeekMessage(M, Handle, 0, 0, PM_REMOVE) then
begin
CL := Chr(M.wParam);
S := CH + CL;
end;
end;
end;
みたいなサンプルを拾ったのですが
Delphiなのでさっぱりわかりません・・・。
似たようなことをやっているのでしょうか?
- 22 名前:デフォルトの名無しさん :03/10/05 20:10
- >>21
SendMessage(hWnd, WM_CHAR, Asc("亜")>>8, 0)
SendMessage(hWnd, WM_CHAR, Asc("亜")&255, 0)
は?
- 23 名前:デフォルトの名無しさん :03/10/05 20:18
- >>13
1バイトずつデータを送ると、受け取るアプリによっては文字化けする。
WM_IME_CHARで、2バイト文字も1回で送れば、文字化けしないかも。
- 24 名前:デフォルトの名無しさん :03/10/05 20:23
- >>19
>>SendMessage(hWnd,WM_CHAR,(UCHAR)pString[i],0);
>>PostMessage(hWnd,WM_KEYDOWN,'\r',0);
これだと、2バイト文字の1バイト目と2バイト目の間に、
"\r"が入ってしまわないか?
- 25 名前:デフォルトの名無しさん :03/10/05 20:41
- みなさんありがとうございました。
>>23さんの方法ですんなり成功しました。
またよろしくお願いいたします。
ちなみに値は WM_IME_CHAR = &H286 でした。
- 26 名前:デフォルトの名無しさん :03/10/05 21:48
- 学校の卒業研究でデータベース(Acces)をVisual C++6.0で
読み書きするプログラムを作っています、アプリケーションの種類は
ダイアログベースです。勉強になるサイトや本などがありましたが
教えていただけませんか。おねがいします。
あとODBCを使うとかいってました。
- 27 名前:デフォルトの名無しさん :03/10/05 23:27
- >>26
ADOつかっとけ
- 28 名前:デフォルトの名無しさん :03/10/06 06:27
- CreateWindowでスタイルをWS_CHILDWINDOW|WS_OVERLAPPEDWINDOWとして
子ウィンドウを作成して表示もできてるんですが、
表示の優先が、完全に逆になってます。
親ウィンドウを最小化して戻すと、一番手前に描画されるウィンドウが
一番下の優先になってます。
ウィンドウの作成のしかたが悪いんでしょうか?
- 29 名前:26 :03/10/06 07:22
- ADOって何ですか?
できればサイトを教えてほしいのですが。
よろしくお願いします
- 30 名前:デフォルトの名無しさん :03/10/06 07:30
- ttp://www.google.co.jp/search?q=ADO+site%3Amicrosoft.com&hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8
- 31 名前:デフォルトの名無しさん :03/10/06 09:21
- ListViewのColumnをフラットにするにはどうすればいいですか?
LVS_EX_なんとか辺りで出来そうな気がするんですが探しても見つかり
ませんでした…。
- 32 名前:31 :03/10/06 09:40
- ごめんなさい、海外のサイト漁ったら出てきました_| ̄|○
LV_NOSORTHEADERですね、マジすまんです。
- 33 名前:デフォルトの名無しさん :03/10/06 12:29
- UNIXみたいに使用中のファイルを削除する方法はありませんか?
- 34 名前:デフォルトの名無しさん :03/10/06 14:29
- >>31
ClumnClick:=False;
- 35 名前:デフォルトの名無しさん :03/10/06 20:52
- >>28
CHILDとOVERLAPPEDは両立しないのでどっちか選べ
- 36 名前:デフォルトの名無しさん :03/10/07 01:42
- >>35
あわわ、ありがとう。 半端に動くんだね・・・。
ところで、MDIを自力で実現することは難しいんでしょうか?
MDIを使えということなのか・・・。つか、MDIにしたほうがいいですかね。
- 37 名前:デフォルトの名無しさん :03/10/07 02:22
- すごい房な質問で申し訳ないんですが、
友達にデバイスコンテキストハンドルは、
取得したあと、早いうちに解放しないといけないって聞いたんですけど、
本当にそうなんですか??
WM_CREATEでGetDCでとったデバイスコンテキストハンドルを
起動中ずっと使おうと思っていたんですが…
- 38 名前:デフォルトの名無しさん :03/10/07 03:15
- >33
フロッピーのインストーラーなんかだと削除どころか引っこ抜く事が出来る。
- 39 名前:デフォルトの名無しさん :03/10/07 03:41
- >>37
俺もためしたこと無いんで知らないがGetDC取りっぱなしだと画面の色数を変えたりウィンドウを移動させたときにうまく行かなくなるかもね
- 40 名前:デフォルトの名無しさん :03/10/07 09:15
- >>37
WinMEなど9x系ではDCの総数に制限がある場合がある
- 41 名前:デフォルトの名無しさん :03/10/07 23:34
- Common Control 6で EDITBOX に対してEM_LIMITTEXTで入力制限をかけると
「文字数単位」で制限がかかる仕様みたいなんだけど、
これを「バイト数単位」で制限をかけるようにはできないのでしょうか?
- 42 名前:デフォルトの名無しさん :03/10/08 00:59
- >41
Common Controlと"EDIT"とには関係無い気がするのだが...
- 43 名前:37 :03/10/08 01:12
- >>39 >>40
あー、なるほど…。
だから、使うたびに取得、解放が望ましいんですね〜。
- 44 名前:デフォルトの名無しさん :03/10/08 05:51
- >>43
全部で5個しかなかったはず。うるおぼえだけど。
- 45 名前:デフォルトの名無しさん :03/10/08 08:06
- OWNDCにしとけば?
- 46 名前:デフォルトの名無しさん :03/10/08 11:13
- >>45
それでもWin9xではGDIヒープを食いつぶすんでないかい
32ビットヒープから取られるならいいけど
16ビットヒープから取られるなら問題
- 47 名前:デフォルトの名無しさん :03/10/08 11:14
- >>33
自己レス
削除はできないけどリネームはできました
- 48 名前:デフォルトの名無しさん :03/10/09 06:26
- 最新のPlatformSDKだとダイアログが真っ白になりませんか?
- 49 名前:デフォルトの名無しさん :03/10/09 08:54
- CreateProcess のコマンドラインに32kの制限があるのは何故なんでしょうか?
- 50 名前:デフォルトの名無しさん :03/10/09 12:26
- >>49
CreateProcessAだから? (てきとー
- 51 名前:デフォルトの名無しさん :03/10/09 22:20
- >>49
それぐらいで十分だと思ってるからじゃないか。
DOS は、確か 128byte だったし、ちょっと前の Unix は 4K ぐらいじゃなかったっけ ?
- 52 名前:デフォルトの名無しさん :03/10/10 09:35
- CapsLockが押されているかどうかの判定(CapsLockのOn/Offではない)は
どのようにしたらいいのでしょうか?
- 53 名前:デフォルトの名無しさん :03/10/10 13:11
- DirectInputのBuffered Dataでも使えば?
- 54 名前:デフォルトの名無しさん :03/10/10 14:04
- >>52 GetKeyState とか GetAsyncKeyStateとか
- 55 名前:デフォルトの名無しさん :03/10/10 15:28
- >54
それだと、日本語キーボードでは、Shift+CapsLockのときしか
判定できないよ。
- 56 名前:54 :03/10/10 16:09
- Σ(´Д` な、なんだってー!!英語キーボード使ってるんで気づかんかった。
- 57 名前:52 :03/10/10 16:25
- >>54さん
>>55さんのいうとおりなんですよね
>>53さん
IDirectInputDevice::GetDeviceDataとかいうものを使うということですか?
DirectX自体ほとんど使ったことないですが頑張ってみます
- 58 名前:デフォルトの名無しさん :03/10/10 16:47
- ネットワークプログラミングのスレで書いたらこっちできいたほうがいい、
と言われたので転載します。
何かご存知の方がいましたら教えてください。
-----
ネットワーク接続を行うマルチスレッドDLLを作っているのですが、
DLLを呼び出す側のプログラムの終了処理に、
dllcleanup();//DLLの関数。スレッド止めてリソースを解放する
FreeLibrary(hMod);
WSACleanup();
ってな感じで呼び出すと、
WSACleanup内で強制終了になります。
FreeLibraryをWSACleanupの後にしたり、
dllcleanup内でスレッドを止めたりした後に
Sleepを数百msec入れると何故かエラーしません。
なんかWSACleanupする際に気を付けるべき点があれば
教えていただけないでしょうか?
- 59 名前:デフォルトの名無しさん :03/10/10 17:27
- スレッドが全て終了したか確認してる?
- 60 名前:デフォルトの名無しさん :03/10/10 17:36
- Winsock が影でスレッド作ってるから、WSACleanup される前に FreeLibrary されて
あぼーんしちゃうんじゃない?
- 61 名前:58 :03/10/10 18:21
- >>59
生成したスレッド全てに対してWaitForSingleObject(handle,INFINITE)
を使って停止を確認してます。
>>60
winsockのDLLをFreeLibraryする、っていうことでしょうか?
色々試した結果やっぱりスレッドを停止した後に何かしら
処理を挟むと(printfとかでも)エラーしないようです。
- 62 名前:58 :03/10/10 18:56
- 解決したっぽいので書いておきます。
ワーカースレッドを10個生成していて、
それらに対してWaitForMultipleObjectで終了待ちしていたのですが、
第3引数のbWaitAllをtrueにしていても何故か実際には
終了していなかったスレッドがあったようです。
原因はわかりませんが、とりあえず代わりに
10個のスレッドに対して一つずつWaitForSingleObjectすることで解決しました。
- 63 名前:デフォルトの名無しさん :03/10/10 21:45
- >>62
WaitForMultipleObject って何 ?
って言うお約束の突っ込みはおいといて、WaitForMultipleObjects の戻り値ちゃんと確認してる ?
WAIT_FAILED とか WAIT_TIMEOUT が返って来てたなんてことないよね。
- 64 名前:58 :03/10/10 22:01
- >>63
あー、戻り値確認してませんでした。
タイムアウト時間はINFINITE指定してたんで
まぁ、WAIT_TIMEOUTは来ないし、WAIT_ABANDONED来てもいいか、
と勝手に思ってました。
ちなみにWAIT_FAILEDってどういう時にでるんですか?
- 65 名前:デフォルトの名無しさん :03/10/10 23:06
- >>64
変なハンドル指定してるときとか。
- 66 名前:デフォルトの名無しさん :03/10/11 17:16
- 改行の仕方を教えて下さい!
以下のように子ウィンドウを作って、テキストを表示しようとしたのですが、
\nで上手く改行できませんでした。
//子ウィンドウの作成
edt_out=CreateWindow("EDIT","",
WS_CHILD | WS_VISIBLE | ES_WANTRETURN | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | WS_HSCROLL,
10,50,width-10,height-20,hw,(HMENU)ID_EDTOUT,hi,NULL);
//ボタンを押した時の操作(の一部)
wsprintf(host_add,"公式名:%s\nIP:%d.%d.%d.%d",
host->h_name,
(BYTE)*(host->h_addr_list[0]),
(BYTE)*(host->h_addr_list[0]+1),
(BYTE)*(host->h_addr_list[0]+2),
(BYTE)*(host->h_addr_list[0]+3)
);
lstrcpy(buff_out,(gho.host_add));
SetWindowText(edt_out,(LPTSTR)buff_out);
- 67 名前:デフォルトの名無しさん :03/10/11 17:32
- >>66
Windowsの改行って何だったっけ?
- 68 名前:デフォルトの名無しさん :03/10/11 17:33
- \r\n
- 69 名前:66 :03/10/11 17:41
- 上手くいきました、ありがとうございます
- 70 名前:デフォルトの名無しさん :03/10/11 18:09
- あるウインドウに、マウスが移動するたびその座標を使ってRectangleで四角を描くようにしたのですが、過去に描いた四角が消えません。
ダブルバッファリングを使ってFillRectで消してから四角を書くと、過去のものは消えますが子ウインドウ(ボタンなど)も一緒に見えなくなってしまいます。
なんとかできないでしょうか?
- 71 名前:デフォルトの名無しさん :03/10/11 18:23
- WS_CLIPCHILDREN
- 72 名前:デフォルトの名無しさん :03/10/11 18:47
- >>71
できました。どうもありがとうございます。
- 73 名前:デフォルトの名無しさん :03/10/12 13:07
- マスクファイルからリージョンへ変更出来るようにしたいのですが何かいい方法は無いでしょうか?
1ピクセルづつ調べてCreateRectRgn();で1ピクセル分のリージョンを作成してCombineRgn();で結合していくと言う方法を
考えたのですが、大きい物になると結構遅くなってしまいます
調べてみたところ、結合されて出来たリージョンが複雑な物の場合CombineRgn();がとても遅くなるようなのですが
もっと早くできる方法は無いでしょうか?
- 74 名前:デフォルトの名無しさん :03/10/12 13:20
- 左手の法則などでマスクの境界の形状を調べてポリゴンの組み合わせにするとか
(これはこれで複雑なのであまり解決にはならないが)
1ピクセルずつ調べて、まとまったピクセルを1行n列まとめて矩形として結合するとか
二番目の方は簡単だし実用的
- 75 名前:73 :03/10/12 13:31
- >>74
1番目は前に自分でやって見たら無理でしたが、2番目をやってみたらかなりいい感じです
これで行こうと思います、ありがとうございました
- 76 名前:デフォルトの名無しさん :03/10/12 20:30
- 設定とかのウィンドウは最初に作っておいて設定ボタンで表示させたり消したりするのと
設定ボタンが押された時に作って設定し終わったら破棄するのとどっちがいいですか?
- 77 名前:デフォルトの名無しさん :03/10/12 20:39
- 頻繁に出したり消したりするもんでなければその都度作ったほうが資源を浪費しなくていい。
- 78 名前:デフォルトの名無しさん :03/10/12 20:48
- タスクトレイに常駐するアプリで、設定ウィンドウ(っていうかそれがメイン
ウィンドウになってる)非表示にしてるだけの見ると萎え萎え
- 79 名前:デフォルトの名無しさん :03/10/12 21:01
- >>78
非表示にしてるのにどうやって見るのか?
- 80 名前:デフォルトの名無しさん :03/10/12 21:05
- >>79 Spy++とか
- 81 名前:デフォルトの名無しさん :03/10/12 21:05
- Spy++って便利だよね(*^o^*)
- 82 名前:デフォルトの名無しさん :03/10/12 21:07
- Spy++ユーザのための設計なんかしてられるか、ボケ。
- 83 名前:デフォルトの名無しさん :03/10/13 00:10
- チェックボックスを最初からチェックした状態で作るにはどうしたらいいですか?
- 84 名前:デフォルトの名無しさん :03/10/13 00:19
- >83
http://pc2.2ch.net/test/read.cgi/tech/1063029371/
- 85 名前:デフォルトの名無しさん :03/10/13 03:16
- >>83
BS_CHECKEDじゃないの?
- 86 名前:デフォルトの名無しさん :03/10/13 03:37
- >>85
そんなもんない。
- 87 名前:デフォルトの名無しさん :03/10/13 03:43
- なぜこのスレに誘導したのかそいつの意図が読めんな
Win32にチェックボックスがないわけじゃないのに。
- 88 名前:デフォルトの名無しさん :03/10/13 07:39
- >>87
何言ってんのこの人 ?
- 89 名前:デフォルトの名無しさん :03/10/13 10:29
- 初心者レヴェルのネタだからだろ?
- 90 名前:デフォルトの名無しさん :03/10/13 10:50
- >>83
BM_SETCHECK
- 91 名前:デフォルトの名無しさん :03/10/13 13:10
- 2ch風のフォントを出したいのですよ
2ch風のフォントってMS Pゴシックの12ですよね?
それで設定してTextOutで出力しても,なんか雰囲気が違うんです
(ずれてる)いろいろ考えてみたんですがこの.
hFont=CreateFont(fontSize,
0,0,0,600,0,0,0,SHIFTJIS_CHARSET,//キャラクタセット
OUT_DEFAULT_PRECIS,//出力精度
CLIP_DEFAULT_PRECIS,//クリップ精度
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE,
FontType);
この部分に問題がありそうだなと…
それで教えていただきたいのですが,2chのAAと同じフォントを出力できる
APIの引数を教えていただきたいのです
- 92 名前:デフォルトの名無しさん :03/10/13 13:14
- 肝心なフォント名とサイズが伏せてあるのはなぜだ
- 93 名前:デフォルトの名無しさん :03/10/13 13:16
- FontTypeは MS Pゴシックです
FontSizeにはもちろん 12が入ってます
- 94 名前:デフォルトの名無しさん :03/10/13 13:19
- MS PゴシックなのかMS Pゴシックなのかはっきりしる
あとFontSizeはフォントの高さであってポイントじゃない
- 95 名前:デフォルトの名無しさん :03/10/13 13:26
- MS Pゴシック ですねすみません(汗
>>あとFontSizeはフォントの高さであってポイントじゃない
えっと…じゃどうすればいいんでしょう?(滝汗
- 96 名前:デフォルトの名無しさん :03/10/13 13:27
- >>95
MSDNでCreateFont調べりゃ変換の仕方書いてあるから・・・
- 97 名前:デフォルトの名無しさん :03/10/13 13:38
- 変換はわかりました!
それから設定でかなり2ch風に近づけることができました…
ですが…まだ微妙に違うんですよ…
AAEditer
- 98 名前:デフォルトの名無しさん :03/10/13 13:39
- うわまだ書いてる途中だったのに(TT
AAEditerと比べるとよくわかるのですが…微妙に違うんです…
何がおかしいんでしょう…
- 99 名前:91 :03/10/13 13:54
- できました!!
みなさんありがとう!
- 100 名前:デフォルトの名無しさん :03/10/13 16:32
- 100Gets!
- 101 名前:デフォルトの名無しさん :03/10/13 17:48
- ウィンドウ@の子ウィンドウの子ウィンドウは@と同じプロシージャにメッセージが返ってこないのですが
そういうものなんですか?
- 102 名前:デフォルトの名無しさん :03/10/13 22:36
- そういうもんです。子ウインドウの子ウインドウの親宛てのメッセージはウインドウ@の子ウインドウに行きます。
- 103 名前:デフォルトの名無しさん :03/10/13 22:45
- ウィンドウ@の子ウィンドウのプロシージャーがウィンドウ@のプロシージャーと同じ物の場合は
ウィンドウ@の子ウィンドウの子ウィンドウのメッセージはウィンドウ@のプロシージャーに行くんだよね?
- 104 名前:デフォルトの名無しさん :03/10/14 04:52
- >>103
> ウィンドウ@の子ウィンドウのプロシージャーがウィンドウ@のプロシージャーと同じ
ってすさまじー状態だな。
親ウィンドウと子ウィンドウが同じ挙動を示すのか。
- 105 名前:デフォルトの名無しさん :03/10/14 17:04
- mciでmp3ファイルを再生する方法ですが、
mciGetDeviceID("test.mp3");
でデバイスIDを取得できるのでしょうか?
- 106 名前:デフォルトの名無しさん :03/10/14 23:11
- >103
論より証拠。コード吊るせ!
- 107 名前:デフォルトの名無しさん :03/10/14 23:34
- >>103
同じプロシージャを定義していれば同じところにいくだろうが、
結局ハンドルは子ウィンドウになってるぞ。
- 108 名前:デフォルトの名無しさん :03/10/15 18:55
- 自作親ウィンドウの中に作った"STATIC"の中に"BUTTON"だけがあるプログラムとかでは
親のプロシージャで制御したくねぇ?
- 109 名前:デフォルトの名無しさん :03/10/15 23:56
- 自分のレンタル鯖のmySQLのデータベースからデータを参照するために必要な
Win32APIの関数ってどの辺を使えばいいの?
関数を教えてもらったらWeb製作板へ逝きますので、使えそうな関数を教えて!
- 110 名前:デフォルトの名無しさん :03/10/16 06:21
- 任意のプログラムが起動したり終了したりしたタイミングを検知するにはどうしたらよいのでしょうか?
- 111 名前:デフォルトの名無しさん :03/10/16 07:22
- delphiで作ったdllをc++で作った他人のプログラムに
読み込ませようとしましたが、読み込み違反が出てうまくいきません。
グローバルメモリの辺りで躓いていると思うんですが。
まず、これがc++の関数部分(画像の受け渡しです)
//---------------------------------------------------------------------------
typedef bool __stdcall (*GetImageProc) ( char* HGLOBAL* );
void __stdcall LoadJpegImage(AnsiString FileName Graphics::TBitmap*
pBitmap)
{
if ( FileExists(FileName) != true ) return;
HINSTANCE hDLL = LoadLibrary( AnsiString("Conv.dll").c_str() );
GetImageProc GetImage = (GetImageProc)GetProcAddress( hDLL "GetImage" );
HGLOBAL data;
GetImage( FileName.c_str() &data );
TMemoryStream* Memory = new TMemoryStream();
Pointer DataPtr = ::GlobalLock( data );
Memory->WriteBuffer( DataPtr ::GlobalSize(data) );
Memory->Position = 0;
::GlobalUnlock( data );
::GlobalFree( data );
pBitmap->LoadFromStream( Memory );
delete Memory;
FreeLibrary( hDLL );
}
//-------------------------------------------------------------------------
- 112 名前:111 :03/10/16 08:09
- それでこっちがdelphiのメソッド部分
var
buffer:Pointer;
function load(fn:PChar):PCardinal;
var
bImage1:TBitmap;
jImage:TJpegImage;
x:Integer;
car:Cardinal;
stream:TMemoryStream;
begin
stream:=TMemoryStream.Create();
jImage:=TJpegImage.Create();
JImage.PixelFormat:=jf24Bit;
JImage.LoadFromFile(fn);
bImage1:=TBitmap.create();
bImage1.HandleType:=bmDIB;
bImage1.PixelFormat:=pf32bit;
bImage1.Width:=jImage.Width;
bImage1.Height:=jImage.Height;
bImage1.Canvas.Draw(0,0,jImage);
bImage1.SaveToStream(stream);
stream.Position:=0;
x:=stream.Size;
つづく
- 113 名前:111 :03/10/16 08:10
- car:=GlobalAlloc(GHND,x); // GPTRもためしました
buffer:=Pointer(car);
GlobalLock(car);
stream.ReadBuffer(buffer^,x);
GlobalUnLock(car);
result:=PCardinal(buffer);
stream.Free;
end;
function GetImage(fileName:PChar;var data:PCardinal):boolean;
begin
data:=PCardinal(load(fileName));
result:=true;
end;
- 114 名前:デフォルトの名無しさん :03/10/16 09:44
- >>111-113
お前はMSDN読んでこい
- 115 名前:デフォルトの名無しさん :03/10/16 12:58
- DelphiにはMSDNはついてきません。
WebのMSDNは使いにくいし中途半端なことしか書いてありません。
- 116 名前:デフォルトの名無しさん :03/10/16 13:02
- やる気無いならおとなしくあきらめてね。
- 117 名前:デフォルトの名無しさん :03/10/16 13:21
- ヽ(`Д´)ノ モウコネエヨ!!
- 118 名前:デフォルトの名無しさん :03/10/16 13:24
- エキスポートしてないからか?
- 119 名前:111 :03/10/16 13:42
- >>114
すみません。色々弄っている内に
バグだらけのコードを送ってしまったようで。
特にgetImageにstdcallが無いのは最悪ですね。
肝心の不都合は何だか
よく分からないうちに自己解決しました。
- 120 名前:111 :03/10/16 13:48
- >>115
delphiには英語版のwin32.hlpがついてますよ。
programFileの下のcommonfileを見るべし。
- 121 名前:デフォルトの名無しさん :03/10/16 14:01
- 英語版でいいなら最新のSDK落としてくれば済む話だと思うが。
- 122 名前:デフォルトの名無しさん :03/10/16 15:14
- Web上で見てもSDKインストールしてローカルで見ても、MSDNの情報は同じだ。
- 123 名前:デフォルトの名無しさん :03/10/16 16:48
- 結論:MSDNライブラリサブスクリプションを買え
- 124 名前:デフォルトの名無しさん :03/10/16 19:04
- ちょっとやってわからなかったらすぐ質問・・・・・
- 125 名前:デフォルトの名無しさん :03/10/16 22:00
- EDITを一行のみで使う場合で、スタイルにES_AUTOHSCROLLを指定しなかったときは
Ctrl+Vなどで貼り付けをするとウィンドウからはみ出す部分は、
貼り付けてくれないような仕様になっているのですか?
- 126 名前:デフォルトの名無しさん :03/10/16 22:39
- >>125
自分で試せ、ボケ
- 127 名前:デフォルトの名無しさん :03/10/16 22:43
- GetTextExtentPoint32で得られる文字列の高さと幅って
改行は考慮されないんでしょうか?
俺の環境じゃ幅に加えられてるだけなんだけど・・・
- 128 名前:127 :03/10/16 22:55
- 上の質問じゃ意味なさすぎなんで...
やりたい事は、文字列を表示するのに
必要な領域を知りたいって事なんですけど、
定石的な方法ってあるでしょうか?
- 129 名前:デフォルトの名無しさん :03/10/16 22:57
- なんつーか高さを加算すりゃいいと思うんだけど
- 130 名前:デフォルトの名無しさん :03/10/16 23:00
- そもそもTextOutだって改行面倒みてくれないんだから、
一旦自力で改行ばらして処理するしかなかろて。
状況によってはDrawText一発だったりもするが。
- 131 名前:127 :03/10/16 23:51
- レスサンクスです。
やっぱ自力でやるしかないですね。
難しい事じゃないんですけど、
どうも文字列操作を自分でやるのに変な抵抗感があったりして。
- 132 名前:デフォルトの名無しさん :03/10/17 01:03
- >>131
130 が言ってるように DrawText 一発じゃだめなの?
DT_CALCRECT 指定してさ。
- 133 名前:デフォルトの名無しさん :03/10/17 01:03
- プロシージャー間のデータ渡しはどうやったらいいでしょうか?
自作コールバックメッセージとか作って渡したほうが良いのか、グローバル関数にしちゃっていいのか
どっちにするべきでしょうか?
- 134 名前:デフォルトの名無しさん :03/10/17 02:05
- >>133
何言ってるのかよく分からないので勘で答えると、普通は構造体。
- 135 名前:127=131 :03/10/17 02:26
- DT_CALCRECTは縦横のどちらか一方しか
修正してくれないと思ってたんですが...
今試してみたらバッチリOKでした。
これでコードがクリーンに!ありがとー
- 136 名前:デフォルトの名無しさん :03/10/17 15:28
- 「MENUITEMINFO構造体でMIIM_BITMAPマスクを立てて
ビットマップハンドラの代わりにHBMMENU_SYSTEMを指定すると
dwItemDataで指定したウィンドウのアイコンが表示される」
とヘルプに書いてあるんですが……
それって「HBMMENU_SYSTEMを指定する場合は、dwItemDataに
ユーザ定義の値を自由に書き込むことはできない」ってことですか?
自分で試したら、そのメニュー項目が表示された時点で、前もってMIIM_DATAで
書き込んだdwItemDataの値が上書きされるみたいなんですが、何か回避法は
ないのでしょうか。
- 137 名前:デフォルトの名無しさん :03/10/17 20:49
- >>134
その構造体はグローバル関数にするんですか?それともSendMessage()でアドレスを渡したりするんですか?
- 138 名前:デフォルトの名無しさん :03/10/17 20:55
- >>137
そもそもプロシージャー間のデータ渡しって何よ。
構造体を関数にするとはなかなかハイセンスなプログラム作ってるみたいだが。
- 139 名前:デフォルトの名無しさん :03/10/17 20:55
- >>137
あなたの言う「グローバル関数」について、誰にでもわかるよう
200字以内で説明せよ (3点)
- 140 名前:デフォルトの名無しさん :03/10/17 21:08
- >>133 >>137
そもそもその質問はWin32APIに関するものなのか?文章からはさっぱり見えないのだが。
- 141 名前:137 :03/10/17 21:50
- ああ、違うグローバル変数だ
- 142 名前:デフォルトの名無しさん :03/10/17 22:46
- >>140
プロシージャーというのは、ウィンドウプロシージャのこと
ではないかと思う。
- 143 名前:デフォルトの名無しさん :03/10/17 22:54
- 勘で要約すると、ウィンドウプロシージャAからウィンドウプロシージャBに構造体を渡したい。
でも自作コールバックメッセージとかグローバル関数とかよくわからないで用語を使ってるのでわけのわからないことに。
- 144 名前:デフォルトの名無しさん :03/10/17 23:16
- >>136
なんか無理っぽいね。
でもなんでHBMMENU_SYSTEMを使うの?
- 145 名前:デフォルトの名無しさん :03/10/18 01:13
- >>143
多分そうなんだろうね。
このスレ的にはWM_COPYDATAをお勧めしておくか。
- 146 名前:デフォルトの名無しさん :03/10/18 01:44
- >>145
別プロセスでやり取りしたいようには見えないのだが。
- 147 名前:デフォルトの名無しさん :03/10/18 08:46
- じゃあ、
SetWindowLongでウィンドウハンドルに構造体のポインタを関連付ける
それで、プロシージャにそのウィンドウハンドルを渡せば・・・あれ?w
- 148 名前:デフォルトの名無しさん :03/10/18 10:40
- とりあえず、SetPropでいいんでない?
- 149 名前:デフォルトの名無しさん :03/10/18 17:58
- Win32APIで画面解像度を変更する事はできるでしょうか?
画面解像度を取得するには
GetSystemMetrics(SM_CXSCREEN)
GetSystemMetrics(SM_CYSCREEN)
で出来るのですが、この値を変えたいのです。
いちいち画面のプロパティで設定変えるのがメンドクサイので
プログラムの中でやりたいと考えてます。
- 150 名前:デフォルトの名無しさん :03/10/18 18:32
- GetSaveFileNameを使って「名前を付けて保存」のダイアログを開いたときに,
ファイル名を入力するところへ初期値として文字列を入力しておくことは
できますか?
- 151 名前:デフォルトの名無しさん :03/10/18 18:46
- >>150
できますよ
- 152 名前:デフォルトの名無しさん :03/10/18 18:48
- Pointer to an OPENFILENAME structure that contains information used to initialize the dialog box. When GetSaveFileName returns, this structure contains information about the user's file selection.
typedef struct tagOFN { // ofn
DWORD lStructSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPCTSTR lpstrFilter;
LPTSTR lpstrCustomFilter;
DWORD nMaxCustFilter;
DWORD nFilterIndex;
LPTSTR lpstrFile;
DWORD nMaxFile;
LPTSTR lpstrFileTitle;
DWORD nMaxFileTitle;
LPCTSTR lpstrInitialDir;
LPCTSTR lpstrTitle;
DWORD Flags;
WORD nFileOffset;
WORD nFileExtension;
LPCTSTR lpstrDefExt;
DWORD lCustData;
LPOFNHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
} OPENFILENAME;
- 153 名前:150 :03/10/18 18:55
- >>152
どれが当たりなんでしょうか・・・
- 154 名前:デフォルトの名無しさん :03/10/18 18:59
- >>149
できますよ
- 155 名前:デフォルトの名無しさん :03/10/18 19:14
- >>154
関数名を教えていただけませんか
後は自分で調べますので
- 156 名前:デフォルトの名無しさん :03/10/18 19:18
- >>149
ChangeDisplaySettings
- 157 名前:デフォルトの名無しさん :03/10/18 19:27
- Pointer to an OPENFILENAME structure
- 158 名前:デフォルトの名無しさん :03/10/18 19:41
- >>156
ありがとうございました
- 159 名前:デフォルトの名無しさん :03/10/18 21:18
- >>150
ファイル名を受け取る所に初期値として文字列を入れとくといいよ
- 160 名前:デフォルトの名無しさん :03/10/18 22:07
- GDI+を使って16色のGIFファイルを書き出したいのですが。
EncoderParametersで設定できそうなのですが、良くわからないので
知ってる方いますか?
Jpegの品質設定はできたのですが・・・
VC++.NETを使っていて
ソースとしてはこんな感じで書き出してます。
CLSID encoderClsid;
EncoderParameters EncParam;
Image *in = new Image(infile);
GetEncoderClsid(L"image/gif", &encoderClsid);
in->Save(outfile, &encoderClsid, &EncParam);
delete in;
- 161 名前:デフォルトの名無しさん :03/10/18 22:08
SetTextCharacterExtraで文字間隔の設定が出来ますが、これと同じように
行間隔を設定するようなAPIは存在するのでしょうか?
- 162 名前:デフォルトの名無しさん :03/10/18 22:47
- RichEditが強烈に重かったので、RTFをプログラム側で作成して、
EM_STREAMINでRTFを直接流し込む事によってだいぶ速くなりました。
しかし、これでも数千行程度になるとまだ重いです。
他にRichEditを軽くする技はどんなものがありますか?
- 163 名前:デフォルトの名無しさん :03/10/18 23:31
- >>162
まずメモリに持っておいて
表示する時だけ表示させるとか。
- 164 名前:136 :03/10/19 11:21
- >>144
レスどうもです。やっぱ無理ですか……。
ツールウィンドウみたいなのを何種類か表示するかも知れなかったので、
そのツールウィンドウのアイコンをメニューアイテムの横に
表示できるといいなあと思ったんです。
mii.fMask = MIIM_BITMAP | MIIM_DATA;
mii.hBitmap = HBMMENU_SYSTEM;
mii.hItemData = (LONG_PTR) hToolWnd; // ツールウィンドウへのハンドル
という感じで。
ちなみにhItemDataには、メニューアイテムを表す自作クラスの
インスタンスへのポインタを代入して逆引きできるようにする予定でした。
仕方ないので、HBMMENU_SYSTEMを使う場合のみ、ポインタではなく
hToolWndから逆引きするようにします……。
- 165 名前:デフォルトの名無しさん :03/10/19 13:29
- >>163
既にそうしているんですが…
RichEditではWebブラウザのように、
別スレッドでストリームに流し込みながら、
ユーザーが流し込んでいる途中のRichEditを自由にスクロールさせながら観覧させる事は出来ないですか?
- 166 名前:デフォルトの名無しさん :03/10/20 07:00
- >>165
全然なんのことかわからんが、表示に必要な分だけ扱うように処理してみたら?
- 167 名前:デフォルトの名無しさん :03/10/20 09:49
- >>166
お返事ありがとうございます。
現在表示される分だけStreamInに流し込んで表示し、
スクロールバーは自分で制御して、
バーが押されたりカーソルキーやPageUp,Downキー
が押された時にスクロール後に表示される部分だけを、
ストリームに流し込み直せという事ですか?
それだとCtrl+Aとか押されてすべて選択された時とかマウスドラッグ等で
選択が1画面以上に渡った時に困りますよね。
もしかしてJaneで言うTHogeTextViewのように、
自分で1からコントロール書かないと無理なのでしょうか?
- 168 名前:デフォルトの名無しさん :03/10/20 14:03
- MSDNで日本語版のWindowsAPIリファレンスってダウンロードできるのでしょうか?
MSDN歩いてみたり「MSDN Windows API ダウンロード」なんかで検索してみたのですが、だめでした
- 169 名前:デフォルトの名無しさん :03/10/20 14:09
- メモリ上のmidiファイルを再生する方法はあるのでしょうか?
DirectXを使わない方法でお願いします。
waveだとsndPlaySoundだと思うのですが。
よろしくお願いします。
- 170 名前:デフォルトの名無しさん :03/10/20 14:10
- >>167
色分けやフォントサイズだけが望みなら、作るか持ってくればRichEditよりはるかに軽い。面倒は面倒だがそれに見合う速度は出る。
表示部分だけストリームで〜〜とかやるほうがむしろ手間かもしれない。
OLEだかなんだかまで必要なら、自分で作ってもRichEditを超えるのは無理。
>>168
MSDN Library Subscription に入会。
- 171 名前:デフォルトの名無しさん :03/10/20 17:28
- 自分のアプリが、XPのビジュアルスタイルで動いているか、
クラシックで動いているか調べる方法はあるでしょうか。
- 172 名前:デフォルトの名無しさん :03/10/20 19:19
- リストビューコントロールでエクセルのようにセルとセルの境界の線を表示するにはどうしたら良いですか?
- 173 名前:デフォルトの名無しさん :03/10/20 19:32
- >>171
comctl32.dll のバージョンを調べてくれ。
- 174 名前:デフォルトの名無しさん :03/10/20 19:53
- >>172
LVS_EX_GRIDLINES
- 175 名前:デフォルトの名無しさん :03/10/20 23:20
- CreateFont()関数を使ってフォントや、論理高や角度などを決めて設定する問題なのですが、
HFONT型の変数を一つ宣言し、CreateFont()関数で生成したらSelectObject()関数で
設定すればそれ以降が生成したフォントになるのは分かるのですが、
問題には
作成したフォントをDeleteObject()する前に、元のフォントに戻すこと
とあるのですが、どうやって元のフォントにもどせばいいのでしょうか?
- 176 名前:デフォルトの名無しさん :03/10/20 23:24
- SelectObjectのヘルプをきちんと読みましょう。
- 177 名前:デフォルトの名無しさん :03/10/20 23:53
- >>169
もちろん方法はあるけど面倒だよ。
諦めることをオススメするが、どうしてもというならmidiOutOpen、midiOutShortMsgあたりを調べてみ。
- 178 名前:175 :03/10/21 00:03
- hFont = SelectObject(ps.hdc, hFont);
TextOut(ps.hdc, 0, 0, "(*゚∀゚)=3ムハー", strlen("(*゚∀゚)=3ムハー"));
SelectObject(ps.hdc, hFont);
こんな感じでよいんでしょうか?同じ変数でやるよりも
hFontOldとかにしたほうが分かり良さそうですが、↑のでも出来ますよね??
- 179 名前:デフォルトの名無しさん :03/10/21 00:09
- >>178
strlen("(*゚∀゚)=3ムハー")はsizeof "(*゚∀゚)=3ムハー"-1でいいだろ。
- 180 名前:デフォルトの名無しさん :03/10/21 00:15
- >>178
戻すときにまたhFontに代入しとかないと消すやつ間違えるぞ
- 181 名前:169 :03/10/21 00:15
- >>177
レスありがとうございます。
調べてみます。
- 182 名前:デフォルトの名無しさん :03/10/21 00:57
- >>178
同じ変数使ったら CreateFont()した hFont を DeleteObject() できないジャン?
- 183 名前:デフォルトの名無しさん :03/10/21 01:15
- hFont = SelectObject(ps.hdc, hFont);
TextOut(ps.hdc, 0, 0, "(*゚∀゚)=3ムハー", strlen("(*゚∀゚)=3ムハー"));
hFont = SelectObject(ps.hdc, hFont);
DeleteObject(hFont);
で一応消せるジャン。やってる奴見たら窓から投げるけど。
- 184 名前:デフォルトの名無しさん :03/10/21 02:03
- 漏れなんか最近はこうだ。
hFont = SelectObject(ps.hdc, hFont);
TextOut(ps.hdc, 0, 0, "ゴラァ"));
DeleteObject(hFont = SelectObject(ps.hdc, hFont));
こんなところのエラーチェックなんてマンドクセー&エラー起きられても対応できねーもん。
365・7・24 てな感じのサーバ製品でもないしさ。
- 185 名前:182 :03/10/21 02:10
- >>183
うむ。書いた後に気づいて、こんなこと↓考えてた
DeleteObject(
SelectObject(ps.hdc,
SelectObject(ps.hdc, CreateFont() ) | TextOut(ps.hdc, 0, 0, "(*゚∀゚)=3ムハー", strlen("(*゚∀゚)=3ムハー"))*0
)
);
これでhFontもいらない。
- 186 名前:デフォルトの名無しさん :03/10/21 02:22
- つまんねーこと質問スレで披露するなよ。まねするだろ。
- 187 名前:デフォルトの名無しさん :03/10/21 02:33
- >>185
計算式の各項の評価順は(? : や && や || の場合以外は)不定だから好ましくない。
- 188 名前:デフォルトの名無しさん :03/10/21 04:48
- ウィンドウプロシージャをC++クラスの中に入れようと思い、
class A{
A(){m_pThis = this;}
static A *m_pThis;
BOOL OnCreate(HWND hWnd, WPARAM wParam, LPARAM lParam);
static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg){
case WM_CREATE:
return m_pThis->OnCreate(hWnd, wParam, lParam);
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
};
こんな感じでthisポインタを静的変数に入れて、そこからメッセージハンドラを
呼び出しているのですが、これって問題ありますか?
- 189 名前:デフォルトの名無しさん :03/10/21 04:54
- APIフックをしたいんですけど
簡単なサンプルありませんか?
- 190 名前:デフォルトの名無しさん :03/10/21 05:00
- 恐ろしいですなぁ
- 191 名前:デフォルトの名無しさん :03/10/21 05:06
- >>188
一個しかインスタンス作らないなら別に構わないと思うけど、WM_CREATE より前には
何のメッセージもハンドリングしなで良いんだったら、CreateWindow の最後の引数を
使って、こうした方が良くない?
class A{
HWND m_hwnd;
LRESULT OnMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {...};
static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_CREATE) {
A* pA = reinterpret_cast<A*> (((CREATESTRUCT *)lParam)->lpCreateParams);
pA->m_hwnd = hwnd;
SetProp(hwnd, TEXT("hogehogebarbar"), (HANDLE) ((CREATESTRUCT *)lParam)->lpCreateParams);
}
HANDLE h = GetProp(hwnd. TEXT("hogehogebarbar"));
if (h)
return (reinterpret_cast<A*>(h))->OnMessage(hwnd, wParam, lParam);
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
};
- 192 名前:デフォルトの名無しさん :03/10/21 05:07
- >>188
なんなら勝手に new A しても良いし。
class A{
A(HWND hwnd) : m_hwnd(hwnd) {};
HWND m_hwnd;
LRESULT OnMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {...};
static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_CREATE) {
A* pA = new A(hwnd);
SetProp(hwnd, TEXT("hogehogebarbar"), reinterpret_cast<HANDLE> (pA));
}
HANDLE h = GetProp(hwnd. TEXT("hogehogebarbar"));
if (h)
return (reinterpret_cast<A*>(h))->OnMessage(hwnd, wParam, lParam);
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
};
- 193 名前:デフォルトの名無しさん :03/10/21 10:15
- 俺も似たようなことやってるが、staticメンバだと別スレッドでCreateWindowを
呼び出したら明らかにヤバイと思う。もしスレッドを使う場合はTLSを使うといいよ。
192のやり方はかなりスマートでいいが、クラスインスタンスだけ先に作って
サイズなんかを指定してからCreateWindowを呼び出したい、というやり方を
とった場合に困るのと…
それからCreateWindowを呼び出したときかならずしもWM_CREATEメッセージが
真っ先に送られるんじゃなく、まずWM_GETMINMAXINFOとかが送られてる。
191,192手法だと、これらにきちんと対処できなくないかな。
- 194 名前:デフォルトの名無しさん :03/10/21 10:26
- すいません
スレッド扱いたいのですが
_endthread関数と_beginthread関数が定義されていないとエラーメッセージが出ます
一応、下のものはインクルードしてあるのですが他何か
インクルードすべきものはあるのでしょうか?
#include <windows.h>
#include <stdio.h>
#include <process.h>
- 195 名前:デフォルトの名無しさん :03/10/21 11:44
- >>194
どの処理系使ってるのか知らんが、例えばVC++の場合プロジェクトの設定で
使用するC/C++ランタイムライブラリがマルチスレッド版になっている必要がある。
- 196 名前:デフォルトの名無しさん :03/10/21 11:50
- CreateProcessなどに渡して実行されるファイルのフルパスを取得するAPIの名前を教えて下さい。
例えば、
cmd
を渡すと
c:\winnt\cmd.exe
が返ってきて
cmd.exeを渡すと
c:\winnt\cmd.exe
が返ってきて
c:\winnt\cmd.exeを渡すと
c:\winnt\cmd.exe
がそのまま返ってきて
c:\winnt\cmdを渡してもやっぱり
c:\winnt\cmd.exe
が返ってくるようなAPIです。
- 197 名前:デフォルトの名無しさん :03/10/21 12:02
- (^∀^)ゲラゲラ おもしろい
- 198 名前:デフォルトの名無しさん :03/10/21 12:16
- >>196
ありません
CreateProcessのlpProcessInformationの中身使ってなんとかしる。
ちなみにNT系と9xだと取得の仕方が違う。
(9x系のやりかたで取るとNT系はファイル名しか帰ってこない)
- 199 名前:デフォルトの名無しさん :03/10/21 12:20
- >>198
CreateProcessする前にパスが分からないと意味がないのです。
フォルダ部分をCreateProcessに渡したいので…
- 200 名前:デフォルトの名無しさん :03/10/21 12:26
- >>199
パス通ってるディレクトリを全検索
- 201 名前:デフォルトの名無しさん :03/10/21 12:36
- やっぱりいいです。ちょうどいいAPIを自分で見つけました。
- 202 名前:デフォルトの名無しさん :03/10/21 12:49
- >>173
それだとわからないです。XPで画面のデザインを戻されている場合とかを知りたいので。
- 203 名前:デフォルトの名無しさん :03/10/21 13:12
- 自作のサービスプログラムをサービス登録後、
コンパネ>管理ツール>サービスの画面から、開始、停止って
やった後、サービス削除を行うと、状態が無効になってきちんと
削除されないんですが(再起動すれば削除されますが)
なんででしょうか?
VC6.0のサンプル(simple.exe(サービス)とclient.exe(サービスと通信用))
を元に作成してて、simple.exeでも削除されませんでした。
サービスの削除を行うとき、停止+削除(OpenSCManager、OpenService、
QueryServiceStatus、ControlService(停止)、DeleteService)と動作させる時は、
きちんとサービスが削除されますが、
削除のみ(OpenSCManager、OpenService、QueryServiceStatus、
DeleteService)の場合に削除されないです。
サービス停止時には、StartServiceCtrlDispatcher()から復帰してmain関数
から抜けてるし、使用したハンドルも全てクローズしてるんですが。
うう、わかりにくい・・・
サービスの停止・削除で注意点とか、サンプルソースとかあったら
教えてぷりーず。
- 204 名前:デフォルトの名無しさん :03/10/21 13:20
- アクティブじゃないときにクリックされてもアクティブになるだけで
zオーダーそのままで最前列まであがってこないようなウィンドウを作る方法は
ありませんか?
WM_MOUSEACTIVATEの戻り値はアクティブにするかどうかしか設定できない
ようですし
- 205 名前:デフォルトの名無しさん :03/10/21 13:35
- >>196
実際にシェルが同じことをしてるわけだから何かありそうだけどね。
でも、知らない。
- 206 名前:デフォルトの名無しさん :03/10/21 13:37
- >>205
だからもう自分で見つけました。SearchPathです。
- 207 名前:デフォルトの名無しさん :03/10/21 13:43
- なんでSearchPathなんだ・・・
- 208 名前:デフォルトの名無しさん :03/10/21 13:50
- SearchPath(NULL, command, ".bat", _MAX_PATH, path, &file) ||
SearchPath(NULL, command, ".com", _MAX_PATH, path, &file) ||
SearchPath(NULL, command, ".exe", _MAX_PATH, path, &file) ||
SearchPath(NULL, command, ".cmd", _MAX_PATH, path, &file)
これで実際>>196の通りの結果が返ってきたからです。
- 209 名前:205 :03/10/21 13:52
- >>206
ふんふん。意外とそのまんまな名前だったね。
- 210 名前:デフォルトの名無しさん :03/10/21 13:58
- ふーん、それでいいならいいけど
- 211 名前:デフォルトの名無しさん :03/10/21 15:16
- LineDDAと同じような挙動をする リージョンやパス対応版の
関数ってあるんですか
- 212 名前:161 :03/10/21 15:54
- 161です。
やはり行間設定するAPIは見つかりませんでしたが、DrawTextには外部レディングを
考慮して改行する機能はあるみたいです。
これを利用して、自分で外部レディングを設定する方法は無いでしょうか?
フォント作成時に設定出来ないものかと思いましたが・・・見つかりません。
- 213 名前:デフォルトの名無しさん :03/10/21 16:06
- >202
すまん。
OpenThemeDataがエラーになるかどうかで判断でどうだ。
- 214 名前:デフォルトの名無しさん :03/10/21 16:32
- おまいら!マイネットワークの設定を切り換えるAPIはありませんか?
- 215 名前:デフォルトの名無しさん :03/10/21 16:39
- >>212
外部レディングって改行とは関係ないが。
つうか、改行なんか自分でやるものだ。
- 216 名前:161 :03/10/21 17:15
- >>215
改行の話ではありません。行間です。
MSDNによると
DT_EXTERNALLEADING
行の高さに、外部レディングの高さ (テキストの行間として適切な高さ) を加算します。
通常、外部レディングはテキスト行の高さに加えられません。
とありますので、行間に関係あると思います。
自分で実装するとなると、DrawTextが持つ機能のほとんども自作せねば使い物になりません。
なにかいい方法はないでしょうか?
- 217 名前:デフォルトの名無しさん :03/10/21 18:08
- 確かに外部レディングは行の高さに大いに関係はあるのだが、
それはフォントによって固定な情報なので、外部からどうこう出来る
物ではない。
そもそも、日本語フォントだと外部レディングも内部レディングも0しか
設定されていないので、このフラグによる違いは出ない。
結論。
自作汁。
- 218 名前:デフォルトの名無しさん :03/10/21 18:22
- すいませんが教えてください
VC++6.0使ってるんですが
メモリ開放のfree関数使うとエラーで止まるんですが
なんでなんでしょう
Cygwinだと動くんだけど・・
GlobalFreeとかも試したんですが
現象は同じです
- 219 名前:デフォルトの名無しさん :03/10/21 18:34
- >>218
お前の書いたプログラムがバグってるから。
- 220 名前:デフォルトの名無しさん :03/10/21 18:38
- VirtualAllocを試してみたら(w
- 221 名前:161 :03/10/21 18:57
- >>217
外部レディングをなんとか後から設定出来れば簡単解決かと思ったんですが・・・(´・ω・`)
ありがとうございました。ノ☆
- 222 名前:デフォルトの名無しさん :03/10/21 19:04
- ところで、DrawTextって、そんな大層なことをやっていたのか?
- 223 名前:デフォルトの名無しさん :03/10/21 20:16
- アラインとか切り詰めとかかな。
- 224 名前:161 :03/10/21 20:31
- http://www.microsoft.com/japan/developer/library/jpgdipf/_win32_drawtext.htm
かなり色々やってます。
全部使う訳ではないですが、自作にあたってこれを参考にしてたら気が遠くなってきます。
- 225 名前:デフォルトの名無しさん :03/10/21 20:34
- >>208
.vbsとか.vbeとか.jsとか.jseとか.wsfとか.wshはいいんだ…。
a.batとa.comとa.exeとa.cmdとかあった場合はcmd.exeと
挙動が違っていいんだ…。
- 226 名前:sage :03/10/21 21:42
- Windows2000AdvancedServerでAWEを使おうとしているのですが、
どうもうまくいきません。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/awe_example.asp
とりあえず、ここにあるサンプルのコードを試してみようと思ったのですが、
どうやらAdvancedServerとは関係ないような(勝手に思っているだけですが)部
分でAPIが失敗してしまいます。下記コードはそのまま丸写しですが、
AdjustTokenPrivileges の後で、GetLastError()が
ERROR_NOT_ALL_ASSIGNEDを返します。
AdjustTokenPrivilegesで、メモリーをロックしようというのは
正常に動作するのでしょうか?
- 227 名前:デフォルトの名無しさん :03/10/21 21:56
- プリントプレビューを作成しようとしています。
対象となるデータは印刷ダイアログで「ファイルに出力」にチェックを入れて
得られるファイルなのですが、スプーラにWritePrinterで吐くのと同様に簡単に
処理できる物なのでしょうか?
自分的にはPSなりLIPSを解釈して描画し直す必要があると思っているのですが
解決策があれば教えて下さい。
# 通常のプレビュー(例えばtext)は、出力処理のCreateDCするところで
# プリンタでなくディスプレイを指定すれば良さそうなのですが…
- 228 名前:デフォルトの名無しさん :03/10/21 22:39
- >>226
特権を持ってないんじゃないの?
- 229 名前:デフォルトの名無しさん :03/10/21 22:42
- >>227
すでにプリンタの制御コードになってしまっているのであれば、
自力でコードを解釈してプリンタをエミュレートする必要がある。
- 230 名前:デフォルトの名無しさん :03/10/21 22:48
- APIの実行コストについて質問です。
OpenProcessで他プロセスのメモリ書き換えを行っているのですが、
同じプロセスに対して複数関数で処理を行う場合、
関数単位でOpen/Closeを行うのとOpenしてから各関数を実行してCloseするのでは大きなコスト差が発生するのでしょうか?
問題がなければ関数単位でプロセスのOpen/Closeを行いたいのですが‥‥
- 231 名前:226 :03/10/21 23:02
- >>228
Administrator権限でログインしていますが...
- 232 名前:デフォルトの名無しさん :03/10/21 23:05
- リストビューで列の幅を変えさせないようにするにはどうしたらいいですか?
- 233 名前:デフォルトの名無しさん :03/10/21 23:23
- ListViewをサブクラス化し、HDN_BEGINTRACK にTRUEを返すとか?
- 234 名前:デフォルトの名無しさん :03/10/21 23:40
- >>233
ありがとうございます
その線で行ってみます
- 235 名前:デフォルトの名無しさん :03/10/21 23:42
- 現在起動しているプログラム(プロセス)リストを取得する
APIってありますか?
- 236 名前:235 :03/10/21 23:49
- 具体的にはMSNメッセンジャーの起動をチェックしたのですが・・・
- 237 名前:デフォルトの名無しさん :03/10/22 00:18
- ToolHelp32
- 238 名前:235 :03/10/22 00:33
- >>237
ありがとうございます。
謝謝!
- 239 名前:デフォルトの名無しさん :03/10/22 11:22
- 質問の仕方が悪かったようなので、再び。
ここでいうパスはファイルのパスではなく、グラフィックの方です。
パス上にあるすべての座標を知りたいです。
パスを構成している頂点座標だけではなくて、です。
例えばフォントを用いてパスを作成し、Aという文字の形をしたパスの
すべての座標を知りたいのですが、それはムリなのでしょうか。
- 240 名前:デフォルトの名無しさん :03/10/22 12:25
- CreateThreadの戻り値って使わなければCreateThreadの直後にCloseHandleしていいよね?
- 241 名前:デフォルトの名無しさん :03/10/22 13:01
- >>240
いいけどスレッドIDが信用できなくなる可能性がある
(ハンドルを閉じなければIDが再利用されることはない)
- 242 名前:デフォルトの名無しさん :03/10/22 13:11
- >>241
IDも使わないからいいんだけど、MSDNでCloseHandleのところに
「スレッドオブジェクトを削除するには、最初にスレッドを終了し、
次にそのスレッドのすべてのハンドルを閉じなければなりません。」
ってあって、「最初にスレッドを終了」と書いてあるので気になった。
- 243 名前:デフォルトの名無しさん :03/10/22 15:52
- >>239
一番簡単なのはモノクロビットマップにを描画して、ピクセルの色を調べることだな。
- 244 名前:デフォルトの名無しさん :03/10/22 16:20
- 質問です。
クリップボードから取得したテキストをファイルに出力したく、
GetClipboardDataで取得、fprintfで出力した所、メモ帳で見る限り正常なのですが、
秀丸やあふの内蔵ビュアなどで見ると改行が全て二重に出力されているようなのです。
hoge
hoge
が
hoge
hoge
になります。
さらに出力したファイルにメモ帳で変更を加えて保存すると
全ての改行が無くなってしまいます。
hogehoge
と言うふうに。
ちなみにfputsでも同様でした。
GetClipboardDataで取得した改行は何か特別な処理をしないといけないのでしょうか?
- 245 名前:デフォルトの名無しさん :03/10/22 17:03
- >>244
よくわからんけど、キャリッジリターンとラインフィードの処理はちゃんとしてる?
つか、秀丸とかの設定は?
- 246 名前:デフォルトの名無しさん :03/10/22 17:43
- GetLastErrorについて質問です。
API内でエラーが発生した場合にセットされるのは分かるのですが、
・エラーが発生してもセットされないケースがあるのか
・エラーが発生しない場合、変更されないか値がNO_ERRORである保証があるのか
この二点お願いします。
もちろん実装によるのは分かるので、
kernel32,user32,gdi32のAPIについてのみでいいです。
- 247 名前:244 :03/10/22 17:47
- >>245
ヒントありがとうございます!
無事に解決しました!
- 248 名前:デフォルトの名無しさん :03/10/22 19:28
- >>246 普通に考えてMSDNに書いてる範囲が保証されると思うけど。 全てのAPIがセットするわけじゃないよ。念のため。
- 249 名前:デフォルトの名無しさん :03/10/22 19:48
- すみません おしえてください。
CreateWindow 関数で ボタンコントロールを作成した場合.
WS_TABSTOPをいくら指定してもダイアログで無い場合処理されない
でした?
昔 うまくやった気がしますが。
アドバイスあったらお願いします。
- 250 名前:デフォルトの名無しさん :03/10/22 19:52
- >>249
メッセージループでダイアログのメッセージ処理した?
- 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としか書いてないので、検索してもほとんど出てこなくて
ウツでした。 みなさん、ヘルプはすみずみまで目を通してるんでしょうかねぇ。
- 501 名前:デフォルトの名無しさん :03/11/03 06:02
- >>2の下の方だったんだがなぁw
- 502 名前:デフォルトの名無しさん :03/11/03 10:09
- >>500-501
スマン、ツボに入って爆笑しますた
- 503 名前:デフォルトの名無しさん :03/11/03 10:15
- GlobalAllocの第1引数でGMEM_MOVEABLEを指定すると「移動可能メモリを確保」するとありますが、
これはガーベジコレクションが働くという意味なんですか?
- 504 名前:デフォルトの名無しさん :03/11/03 12:21
- >>503
Win16時代にはGCが働いていた(過去形)。
今は実際には決して移動することはないので実質的に意味ない。
HGLOBALは間接ポインタに決まってると決め付けていた
Win16アプリを移植しやすくするために存在しているだけ。
- 505 名前:デフォルトの名無しさん :03/11/03 13:22
- えー、スレ違いでしたら無視してください。
ゲームを外部から操作できるのかと思い、PostMessage を使って
WM_KEYDOWN をメッセージキューにポストしてみたのですが
何の反応も有りませんでした。Spy++を使ってキューを監視してみても
キーボードから入力したときと全く同じメッセージがポストされているのですが……
ご助言いただければ幸いです。
- 506 名前:デフォルトの名無しさん :03/11/03 13:31
- できると思うがその内容ではコメントしようも無い。
- 507 名前:デフォルトの名無しさん :03/11/03 17:59
- >>505
普通は、keybd_event() or SendInput() じゃないかと。
- 508 名前:デフォルトの名無しさん :03/11/03 19:00
- >>503
memory compactionね。
garbage collectionとはちょいニュアンス違う。
移動可能メモリをハンドルで表現する意味も
昔はmemory compactionへの対応だったが
今ではプロセス境界を跨ぐための拡張アドレスと
ニュアンス変わってきてる。
- 509 名前:デフォルトの名無しさん :03/11/03 19:45
- つまり、移動可能メモリというのは
Mac OS の Handleみたいなものですか?
- 510 名前:デフォルトの名無しさん :03/11/03 20:06
- >>509
みたいなものではなく、全く同じもの。
- 511 名前:478 :03/11/04 02:31
- 478ですがレスが無いようなので質問を他の場所で投げてみようと思います。
一応その旨書いておきます。
- 512 名前:デフォルトの名無しさん :03/11/04 10:06
- kbhit()
じゃだめなん?
- 513 名前:デフォルトの名無しさん :03/11/04 18:00
- >>512
>>480
- 514 名前:デフォルトの名無しさん :03/11/04 21:08
- >>506
申し訳ございません。具体的にはどのような情報が必要なのでしょうか。
PostMessage(hWnd, WM_KEYDOWN, 0x4E, 3211265);
PostMessage(hWnd, WM_KEYUP, 0x4E, 3224436737);
このような形でポストしました。
>>507
助言ありがとうございます。しかし以下のようにやっても、やはり反応が有りません。
SetFocus(hWnd);
keybd_event(0x4E, 0, 0, 0);
keybd_event(0x4E, 0, KEYEVENTF_KEYUP, 0);
これもやはりテキストエディタに放り投げてみると正しくキーが押されていました。
何かよく分からないことだらけですが、もう少し調べてみようと思います。
- 515 名前:デフォルトの名無しさん :03/11/04 22:13
- DirectInput使ってるんじゃねーの?
- 516 名前:デフォルトの名無しさん :03/11/05 00:01
- >>514
PostMessage(hWnd, WM_KEYDOWN, 0x4E, 3211265);
Sleep(500);
PostMessage(hWnd, WM_KEYUP, 0x4E, 3224436737);
こうしてもダメ?
- 517 名前:デフォルトの名無しさん :03/11/05 00:29
- 漏れもDirectInputに一票
#SendMessageを使ってみたらどうよ?
- 518 名前:デフォルトの名無しさん :03/11/05 02:03
- リストビューの内容を変更するために表示されるDEITBOXの位置を変更しようと思い、
最初のLVN_BEGINLABELEDITが送られてきた時に
int offset = 10;
hEdit = ListView_GetEditControl(hwnd); //DEITBOXのハンドルを取得
GetWindowRect(hEdit , &rect);
SetWindowPos(hEdit , HWND_TOP , rect.left + offset , rect.top , 0 , 0 , SWP_NOSIZE | SWP_NOZORDER);
としたのですが、DEITBOXの位置は変わりませんでした
EDITBOXの位置が初期化されるのはこのメッセージの時ではないのでしょうか?
LVN_BEGINLABELEDITからLVN_ENDLABELEDITまでの間にどのようなメッセージが送られ、
EDITBOXの位置が初期化されるメッセージはどれなのか教えていただけないでしょうか?
- 519 名前:デフォルトの名無しさん :03/11/05 10:52
- >>515,517
むしろゲームでDirectInput使ってなかったら・・・
- 520 名前:x :03/11/05 10:59
- >>396
WinFXネタに埋もれてしまったのですが、この件で
何かご存じの方はいらっしゃいませんかねぇ?
- 521 名前:デフォルトの名無しさん :03/11/05 11:12
- >>520
セカンダリモニタはドライバ側の機能だろうから、
APIでは無いのでは?
- 522 名前:デフォルトの名無しさん :03/11/05 11:22
- >>520
OFFにできるかは知らないが、GDIのAPIにマルチディスプレイ用APIがある。
解像度切り替えはChangeDisplaySettingsExでできるっぽい。
- 523 名前:デフォルトの名無しさん :03/11/05 11:25
- >>521
ドライバによっては独自のマルチモニタ機能を提供しているものもある(初期のG4x0とか)が、
基本的にはマルチモニタはWindowsの機能だ。
- 524 名前:デフォルトの名無しさん :03/11/05 15:25
- FindFirstFile() で c:\winntを "*aa*" で検索すると
$NtUninstallKB824105$
がヒットするのだけど、どういう理屈なんでしょうか?
- 525 名前:デフォルトの名無しさん :03/11/05 15:30
- Σ(゚Д゚; SFNか
- 526 名前:デフォルトの名無しさん :03/11/05 22:28
- win98,VisualC++6.0で開発しています。
デスクトップ画像を送受信する処理を下記の様に作っています。
(サーバ側)
[デスクトップ画面取得]
CWindowDC cSrcDC(NULL);
CDC m_cDC;
CBitmap m_cBitmap;
m_cDC.CreateCompatibleDC(NULL);
m_cBitmap.CreateBitmap(GetSystemMetrics (SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),cSrcDC.GetDeviceCaps(PLANES),cSrcDC.GetDeviceCaps(BITSPIXEL),NULL);
m_cDC.SelectObject(&m_cBitmap);
m_cDC.SetMapMode(MM_TEXT);
m_cDC.BitBlt(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),&cSrcDC,0,0,SRCCOPY);
[画像送信]
send(dstSocket,(char*)&m_cDC,sizeof(m_cDC),0);
(クライアント側)
[画像取得]
recv(sock, (char*)&m_cDC, sizeof(m_cDC), 0);
[画像表示]
CClientDC cDstDC(this);
cDstDC.BitBlt(0,0,1600,1200,&m_cDC,pos.x,pos.y,SRCCOPY);
(1)一台のPCでサーバとクライアントを兼任すると正常に表示されるけど、
(2)サーバとクライアントを別々のPCで起動すると画像が表示されません。
win2000とXPだと(1)すら表示されません。
正しくデスクトップ画面を送受信するにはどのようにすればよいのでしょうか?
- 527 名前:デフォルトの名無しさん :03/11/05 22:30
- CDCはデバイスコンテキスト
画像データではないから、送信できなくて当然。
- 528 名前:デフォルトの名無しさん :03/11/05 22:47
- 俺はむしろ
> 一台のPCでサーバとクライアントを兼任すると正常に表示される
事に驚愕した。
- 529 名前:デフォルトの名無しさん :03/11/05 23:04
- まぁ、Win98だし。
- 530 名前:デフォルトの名無しさん :03/11/05 23:14
- GDIハンドルをソケット経由でコピーしただけだな
- 531 名前:デフォルトの名無しさん :03/11/06 00:18
- >>524
どうあってほしい?
Unixのshellやregexpのような振る舞いは期待するだけ無駄。
- 532 名前:デフォルトの名無しさん :03/11/06 02:33
- CDCには仮想関数テーブルもあるんじゃないの?
- 533 名前:デフォルトの名無しさん :03/11/06 02:49
- >>532
仮想関数テーブルがあっても参照されなければエラーにはならんと思うが
- 534 名前:x :03/11/06 09:19
- >>521
>>522
>>523
ありがとうございます。
ChangeDisplaySettingsEx()
も見てみたんですけど、ON/OFFは見あたらないんですよね...
でも、この辺に絞ってもう少し探してみます。
- 535 名前:デフォルトの名無しさん :03/11/06 10:04
- TreeView でルートアイテムだけにイメージを表示して、
子以下のアイテムは出さないってできますか?
ルートにはこれ、
TV_INSERTSTRUCT tvis;
tvis.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
tvis.item.iImage = 0;
tvis.item.iSelectedImage = 0;
子にはこれ、
TV_INSERTSTRUCT tvis;
tvis.item.mask = TVIF_TEXT;
tvis.item.iImage = 1;
tvis.item.iSelectedImage = 1;
を使いましたが、子までiImage、iSelectedImageが有効になります。
ちなみにWinXP SP1、VC++6.0 SP5です。
- 536 名前:デフォルトの名無しさん :03/11/06 11:30
- atoiみたいなAPI教えてください
- 537 名前:デフォルトの名無しさん :03/11/06 13:11
- >>536
その前に atoi でダメな理由を教えてください
- 538 名前:デフォルトの名無しさん :03/11/06 14:34
- その前にくだらんやりとりしないでください。StrToInt。
- 539 名前:デフォルトの名無しさん :03/11/06 16:03
- その前にさっさと教えやがってください。
- 540 名前:デフォルトの名無しさん :03/11/06 16:07
- その前にすでに教えてもらってるのに無視しないでください。
- 541 名前:デフォルトの名無しさん :03/11/06 17:08
- その前にHEX文字を数値に変換する方法を教えてください。
- 542 名前:デフォルトの名無しさん :03/11/06 17:09
- StrToIntEx
- 543 名前:デフォルトの名無しさん :03/11/06 17:26
- 初めまして2chに書き込むのははじめてなのでここに書き込んでいいのか
わかりませんが..逆アセンブラについて質問なのですが、逆アセンブラ
を使えるようになるには、何を学べばよいですか??
もしよかったらメッセで暇な時ちゃちゃと答えてくれる人いませんか??
- 544 名前:デフォルトの名無しさん :03/11/06 17:28
- 放置よろ
- 545 名前:デフォルトの名無しさん :03/11/06 18:39
- >>544
放置できない馬鹿
- 546 名前:デフォルトの名無しさん :03/11/06 19:08
- >>545
放置できない馬鹿を放置できない馬鹿
- 547 名前:デフォルトの名無しさん :03/11/06 19:31
- >>544-547
放置すべき馬鹿を相手にして喜ばせるアホ。
- 548 名前:デフォルトの名無しさん :03/11/06 19:45
- \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
- 549 名前:デフォルトの名無しさん :03/11/06 20:02
- >>543
(1) CPUアーキティクチャ
(2) アセンブラ
(3) API
(4 )OS
- 550 名前:デフォルトの名無しさん :03/11/06 20:07
- 同期でシリアルポート読んだあと、タイムアウトで戻ってきたかどうかを
ReadFileの戻り値で知ることは出来るの?
- 551 名前:デフォルトの名無しさん :03/11/06 20:16
- >>538
atoiの為だけにShlwapi.dllをロードするのも哀れだな(w
- 552 名前:デフォルトの名無しさん :03/11/06 20:20
- >>550
読み取ったバイト数がゼロで返ってくる。
つか、MSDN嫁!
- 553 名前:550 :03/11/06 20:22
- >>552
ご教授ありがと〜
- 554 名前:デフォルトの名無しさん :03/11/06 20:31
- WM_KEYDOWNメッセージで二つのキーの組み合わせをPostMessageするのは
どうすれば良いのでしょう?
- 555 名前:デフォルトの名無しさん :03/11/06 20:35
- >>551
Shlwapi.dllに何か恨みでもあんのか?
- 556 名前:デフォルトの名無しさん :03/11/06 20:45
- >>551さんはちょっとキティなんでそっとしておきましょうよ
- 557 名前:526 :03/11/06 21:59
- DIB 送受信 winsockで検索したらやり方モロに書いてたページがヒットして解決しました。
卒研の中間発表の予稿に「デスクトップ画面を送受信できる」と書いたので何としても作らなければいけなかったので本当に助かった。
明日は発表日。今から発表の練習します。
- 558 名前:551 :03/11/06 22:12
- >>555
いや、たった1つの関数、それもStrToIntの為だけにShlwapi.dllロードするなんて、贅沢だなと思って。
資源少ない時代の貧乏性が抜けきれてなくてね・・・
- 559 名前:デフォルトの名無しさん :03/11/06 22:17
- >>552
ゼロになるのはファイルの終点で読みこんだ時としかかいてないぞ。
何所に書いてる?
- 560 名前:デフォルトの名無しさん :03/11/06 22:20
- >>551 うん、その気持ち分かる
- 561 名前:デフォルトの名無しさん :03/11/06 22:20
- >>558
おまえが哀れ。
- 562 名前:デフォルトの名無しさん :03/11/06 22:35
- >>558
shlwapi.dll なんて大抵の環境ですでにメモリ上に存在するから、
リソース的には問題なしだと思ってたけど、どうなんだろう。。
- 563 名前:デフォルトの名無しさん :03/11/06 23:13
- >>554
相手のアプリの実装による。
特にCtrl,Alt,Shiftの状態を、相手のアプリがGetAsyncKeyState()を使って
チェックしている場合は、物理的な状態なので再現するのは無理なはず。
代わりにWM_COMMANDなどを直接送ったほうが。
- 564 名前:デフォルトの名無しさん :03/11/06 23:36
- atoi使わない方がCランタイム使わなくて嬉しいことあるですか?
- 565 名前:デフォルトの名無しさん :03/11/07 00:32
- 質問です。
timeGetTimeの返す値って、PC起動してから時間が立つほど不正確になるもんなんですか?
Cでゲームを作っていて、ゲームなので高速な処理をするためにメッセージループをいじって
while (TRUE){
if( PeekMessage(&msg, NULL, 0, 0,PM_REMOVE)) {
if(msg.message == WM_QUIT) break;
TranslateMessage(&msg);
DispatchMessage(&msg);
} else {
gameMain();
}
} return (msg.wParam);
処理のほとんどをgameMainに費やすようにしています。
で、例えば敵機の弾とかの移動距離を算出するために、
「(今のtimeGetTime()の値 - 前回ループ時のtimeGetTimeの値)/1000*1秒間に移動したい距離」
とすることで、CPUの処理能力によって差が出ないようにしてるのですが、
PC起動してから長時間たっていると、動きがガクガクするのです。
漏れのPCがヘタレなだけ?
- 566 名前:デフォルトの名無しさん :03/11/07 01:05
- >>554
2回呼び出して、50ミリ秒以内なら一緒に押したと見なす。
- 567 名前:デフォルトの名無しさん :03/11/07 02:59
- RECT構造体のメンバはlogical unitなので、DrawText()などで
この構造体を使うときはMapping Modeの影響を受けると思います。
で、RECTをGetClientRect()などで取得するとMapping Modeのことは
計算されていないと思うのですが、この取得した値ををMM_TEXT以外の
モードで使うにはどうすればいいのでしょうか?
- 568 名前:デフォルトの名無しさん :03/11/07 11:17
- >>565
ゲーム制作系のスレに行くべき
- 569 名前:デフォルトの名無しさん :03/11/07 11:38
- >>565
( ´∀`)ノ
http://www2.bbspink.com/erog/kako/1050/10509/1050908540.html
- 570 名前:デフォルトの名無しさん :03/11/07 11:48
- WS_VISIBLE WS_CHILD WS_BORDER ES_MULTILINE
WS_VSCROLL WS_HSCROLLのスタイルで作った
EDITコントロールに、複数行のテキストをバッファの文字に
変更があった時などSetWindowTextで表示させると、
その度 勝手に垂直スクロールバーが元の一番上に移動して
怖いです。
止めさせる方法教えて下さい。
- 571 名前:デフォルトの名無しさん :03/11/07 11:53
- EM_SETSEL と EM_REPLACESEL ではどうですか?
- 572 名前:670 :03/11/07 12:01
- >>571
レスどうも。テキストは一行ごと追加して
行自体が下にずれていくから、そのやり方だと難しそう・・・
- 573 名前:570 :03/11/07 12:09
- >>571
ああ、EM_REPLACESELは文字列置換だから簡単にできそうですね。
削除かと勘違いしてた。 いい方法をありがとう。
- 574 名前:デフォルトの名無しさん :03/11/07 16:48
- >>567
自分で変換
- 575 名前:デフォルトの名無しさん :03/11/07 18:09
- >>565
つうかPeekMessage使うなボケ。
藻前、本のサンプル理解しねーで丸写ししただろ?
- 576 名前:デフォルトの名無しさん :03/11/07 18:25
- >>575
なんで?
- 577 名前:デフォルトの名無しさん :03/11/07 18:40
- >>552
お前こそちゃんと読んだか?
読みこめたバッファを伴って処理を戻すからゼロとは限らないよ。
たんに、関数の最初にその変数が、0リセットされるだけ。
- 578 名前:りょ :03/11/07 18:43
- いま、困っています。
MXでとれてしまった画像ファイル(JPEG)
が削除できないのです。
どうしたらいいのですか?
削除をおすと
(ファイル削除できません。指定されたファイル名は、無効か
または長すぎます。別の名前を指定してください。)
とでます。
名前を変えてみたりしたんですが
(ファイル名を変更できません。指定されたファイル名は、無効か
または長すぎます。別の名前を指定してください。)
とでてしまいます。どうしたらいいのですか?
- 579 名前:デフォルトの名無しさん :03/11/07 18:54
- アクセス権の設定ダイアログを表示する方法を教えてください
- 580 名前:デフォルトの名無しさん :03/11/07 20:41
- >>575
漏れも気になる
なんでPeekMessageダメなん?
- 581 名前:デフォルトの名無しさん :03/11/07 21:56
- ListView についてくる Header の高さを変える方法はありますか?
ListView に WM_SETFONT を送って字を大きくしたのはいいのですが、
Header の高さが変わってくれません。
- 582 名前:デフォルトの名無しさん :03/11/07 23:42
- >>564
これとか。
> ランタイムライブラリのサイズは 20KB もあるので、
> ランタイムライブラリを使わないだけで、
> 20KBのダイエットに成功します。
ttp://www.nitoyon.com/vc/tips/light_exe.htm
- 583 名前:デフォルトの名無しさん :03/11/08 00:58
- >>578
IOCTL_DISK_FORMAT_VOLUME
- 584 名前:デフォルトの名無しさん :03/11/08 01:58
- WM_MOUSEWHEELを後ろのウィンドウに透過して送りたいのですが、
下のよりスマートな方法はないのでしょうか?
case WM_MOUSEWHEEL:
ShowWindow(hWnd, SW_HIDE);
hBackWnd = WindowFromPoint((POINT)lParam);
ShowWindow(hWnd, SW_SHOW);
SendMessage(hBackWnd, WM_MOUSEWHEEL, wParam, lParam);
- 585 名前:デフォルトの名無しさん :03/11/08 02:25
- >>579 EditSecurity ?
- 586 名前:デフォルトの名無しさん :03/11/08 09:59
- >>584
後ろのウィンドウは不定なの?
- 587 名前:デフォルトの名無しさん :03/11/08 10:00
- 駆動中のプロセスを列挙して,任意のプロセスを終了させたいのですが.
PIDとかがまったくわからない状態で,プロセスの名前だけをたよりに
そのプロセスを終了させたいのですが.
どのようにしたらよいのでしょうか?
- 588 名前:565 :03/11/08 11:09
- >>568
板違いですか。誘導どうもです。
>>569
ためになりそうですね。読んでおきます。
>>575
お察しの通り丸写しです…。
なんで?
- 589 名前:デフォルトの名無しさん :03/11/08 11:22
- >>587 プロセス列挙して探す
- 590 名前:589 :03/11/08 11:29
- 列挙て書いてたか。オープン→ベースネームか?
- 591 名前:デフォルトの名無しさん :03/11/08 12:25
- >>587
似たようなプログラムのソースを見る
- 592 名前:デフォルトの名無しさん :03/11/08 13:54
- >>565
CPU使用率、常に100%の予感。
- 593 名前:デフォルトの名無しさん :03/11/08 14:10
- >>592
そお思う理由を書きたまゑ
- 594 名前:デフォルトの名無しさん :03/11/08 16:39
- >>587
CreateToolhelp32Snapshot
↓
Process32First & Process32next(要するに列挙)
↓
lstrcmp(ProcessName , PROCESSENTRY32::szExeFile)
でどうですか?
- 595 名前:594 :03/11/08 16:48
- 訂正
CreateToolhelp32Snapshot
↓
Process32First & Process32next(要するに列挙)
↓
lstrcmp(ProcessFileName , PROCESSENTRY32::szExeFile)
↓
OpenProcess(PROCESSENTRY32::th32ProcessID)
↓
GetModuleFileName
↓
lstrcmp(yours , ProcessFullPathName)
PROCESSENTRY32::szExeFileはファイル名だけだから
こっちの方が確実かな。
- 596 名前:587 :03/11/08 17:39
- やっぱり列挙して比較するしか方法はないのですね.
みなさんありがとう!
- 597 名前:デフォルトの名無しさん :03/11/08 18:08
- なるほど、名前で一発検索できる関数を探していたのか
- 598 名前:デフォルトの名無しさん :03/11/08 18:20
- >>592
CPU使用率が100%近くになるのは意図通りだろ
- 599 名前:デフォルトの名無しさん :03/11/08 20:22
- 質問です。
Programming Windows 5th Editionを読んでいるんですが、プロセスの中で
GDIオブジェクトを使うと大体DeleteHogeみたいな関数で使い終わった
オブジェクトを消すよう書いてあります。
これを守らずに放置してプロセスを終了した場合メモリリークしますか?
それともあるプロセスで使ったものはプロセスの終了とともに回収され
ますか? (もちろんそういう仕組みに任せるのは好ましくないですが)
- 600 名前:565 :03/11/08 21:31
- 言い忘れてた。
ゲ製作技術のほうにいきますんで、
>>565の質問は放置願います。
>>CPU100%
作ってるのは音ゲーなので、CPU100%でいいです。
まぁ「いい」とか「わるい」とか言うのは使う側なんだけども。
- 601 名前:デフォルトの名無しさん :03/11/08 22:49
- ゲームでも無駄なCPU使用はやめれ。
- 602 名前:デフォルトの名無しさん :03/11/08 22:56
- >>599
プロセス終了時点で破棄されるので、終了時に消して回る必要はない。
むしろバグを生みそうなのでやらないほうがよい。
つまり、
起動時に一度作って、ずっと使いまわすものはDeleteしなくてよい。
ユーザ操作などで動的に作られるものであれば、Deleteする仕組みを
あらかじめ入れておいたほうがよい。
MFCが使えるならばそれに任せたほうが楽。
- 603 名前:デフォルトの名無しさん :03/11/08 23:18
- >>601
まずは目的の動きができあがってから、減らしますよ。
- 604 名前:デフォルトの名無しさん :03/11/08 23:39
- >プロセス終了時点で破棄されるので、終了時に消して回る必要はない。
ここまでは、まあそういう考えの人もいるってことでいいが
>むしろバグを生みそうなので
これは戯言。そんなヘボPGは廃業しろ。入門者なら破門だ。
- 605 名前:デフォルトの名無しさん :03/11/08 23:57
- 俺はハンドル作ったらauto_ptrみたいはスマートハンドルクラスに突っ込んでる
- 606 名前:デフォルトの名無しさん :03/11/09 00:12
- >>604
原文書いた人じゃないけど
余計なことはしない方が良いって思ってるだけかもしんない。
それもひとつの信念。そんなに跳ね飛ばすほどのことでもなかろうに。
- 607 名前:デフォルトの名無しさん :03/11/09 00:48
- >プロセス終了時点で破棄されるので、終了時に消して回る必要は
こんな余計なこと考えるくせにな
- 608 名前:デフォルトの名無しさん :03/11/09 00:53
- プロシージャを書くのがめんどうという理由でウィンドウラッパークラスを作っています。
が、そのプロシージャの動作(なんかwhile〜〜メッセージで分岐するの)をどうすれば楽チン
になるのか思いつきません。汎用的に色んなアプリでも簡便に使い回せるクラスにしたいのですが
どうすればいいでしょうか?
- 609 名前: