スレ立てるまでもない、Win32APIについての質問はこちらへどうぞ。
最低限、最新スレくらいは質問する前に検索ぐらいしてください。
過去スレ・参考は
>>2-5 くらいを参照してください。
3 :
デフォルトの名無しさん :04/01/11 23:12
このスレは24:00をもって削除されます。
4 :
デフォルトの名無しさん :04/01/11 23:40
一行で休止状態にできるAPIは?
>>4 SetSuspendState(TRUE,TRUE,TRUE);
すんません。以前質問させてもらった者なんですが、 また質問が・・・ VFWのAVISaveVで、ファイルを保存しようとするのですが、 どうも「デスクトップ」等の全角文字が入るとファイルオープン エラーで保存してくれないみたいなのですが、 同様の症状になったかおられますか? もしおられたら、ご返事よろしくお願いしまつ。
9 :
Win32SDK勉強中 ◆Win32BkCJ. :04/01/12 19:12
>>前スレ187 >MSのplatformsdkアップデートからドキュメントだけ落とせたかも 探しても出てきません(焦) どこにあるのかご存知の方がいらっしゃいましたらご教授ください。 お願いいたします。
>>9 >>2 お前は本当に探してるのかと、子一時間問い詰めたい。
グーグル先生に聞いてもトップにくるんだが…
>>9 SDKのドキュメントは英語しかなかった気がする。
>>10 ,11
2のサイトを探して、googleでも調べた後の質問でした。
内容は英語でも一向に構いません。他のオフラインのPCに
内容を移動しなければいけないので素直に全部ダウンロードすることに
しました(ISDNで)。ただ、UpdateSDKActiveXをインストールしておらず、
見ることができていませんでした。お叱りごもっともです。
スレ汚しスミマセンm(_ _)m
SelectObjectの戻り値は以前使ってたSelectした物と同種のGDIObjectですが、 CreateCompatibleDCで作ったばかりのデバイスコンテキストに初めて(例えば) BitmapとかをSelectObjectした時は戻り値は何を吐くんでしょうか? あと古い文献のサンプルコードで、プログラム終了時にCreateCompatibleDCで 作ったメモリDCをビットマップをSelectしたままDeleteDCしてましたがこれは 問題ないんでしょうか?
>CreateCompatibleDCで作ったばかりのデバイスコンテキストに初めて(例えば) >BitmapとかをSelectObjectした時は戻り値は何を吐くんでしょうか? たしか1x1の白黒ビットマップと思う。 >ビットマップをSelectしたままDeleteDCしてましたがこれは問題ないんでしょうか? 問題無いだろ。 そのあとでDeleteObjectで自分で作ったBMPの処理も忘れるなよ。
>>14 マリガトウ
2年来の疑問が氷解しますた
>>14 > ビットマップをSelectしたままDeleteDCしてましたがこれは問題ないんでしょうか?
マズイんでね?
洗濯を解除してからでねえと正しく解放できなかったような。
今までそのまま解放してたけど 選択解除ってどうやんの?
>>17 SelectObjectの返り値を退避させといて戻す
もしくは SaveDC と RestoreDC を使う
20 :
デフォルトの名無しさん :04/01/13 12:07
デスクトップ上に絵を描画して、その絵を消したり動かしたりしたいのですがどのようにしたらいいでしょうか? 取り合えず自分でやってみた方法は、絵と同じ形でリージョンを作成しウィンドウをその形に切り取りウィンドウごと動かして 絵が動いているように見えるということをやってみたのですが、もっといい方法はないでしょうか?
ひたすら質問しまくっていた、教えて君です。 非常に低レベルだと思われるかもしれませんが、 教えていただいた結果を報告いたします。 まず、何らかの理由でWS_THICKFRAMEが付加されたにもかかわらず、 ウインドウサイズを変更できないようにする方法について、 case WM_GETMINMAXINFO: MINMAXINFO *info; info =(MINMAXINFO *) lParam; info->ptMinTrackSize.x = info->ptMaxTrackSize.x = 640; info->ptMinTrackSize.y = info->ptMaxTrackSize.y = 480; return 0; とする事で、WS_THICKFRAMEが付加されようと、MoveWindow()を使われようと、リサイズできないウインドウを作る事ができました。 ご親切に何度も教えていただき、ありがとうございました。
任意のウインドウにWS_EX_TOPMOSTを付加したい場合、 何故、SetWindowLong()ではなく、SetWindowPos()を使わなければならないのかという質問に対して、 >試せば分かる。 と言われました。そこで、実際に試してみることにしました。 まず、SetWindowLongを使用する方法から――。 //hTargetは最上位表示にしたいウインドウのハンドル。 LONG style; style = GetWindowLong(hTarget, GWL_EXSTYLE); style = style | WS_EX_TOPMOST; SetWindowLong(hTarget, GWL_EXSTYLE, style); hTargetの値が正しいかどうかは、FlashWindowEx()を使って確認済みです。 SetWindowLong()戻り値は非ゼロでした。しかし、ウインドウの挙動は変わりません。 spy++を使って調べても、 WS_EX_TOPMOSTを確認できませんでした。 SetWindowPosではどうかというと――。 SetWindowPos(hTarget, HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE); ウインドウは最上位に表示されました。 拡張スタイルにも WS_EX_TOPMOSTが付加された事を確認しました。 プログラムは完成しました。友達がこのプログラムを欲しがった理由は、フルスクリーンで起動するゲームでも、常にプレイヤーが見えるようにしておきたかったのだそうです。こういうツール、どこにでも転がっていそうな気がしますがw 以前使っていたツールは、クソ重たい上に、複数のウインドウに対して設定できなかったそうです。 また、別のウインドウを変更すると、前の変更が問答無用で元に戻ってしまうとか (しかもシェアウエア。まあ関係ないけどw)
>>20 9x系をサポートしないのであれば、レイヤードウインドウが簡便ですと言ってみるテスト
MDIの子ウインドウにIEコンポーネントを使用して タブ切り替え型ブラウザを作ろうと思ったのですがうまくいきません。 ちなみにクラス名を自分で作成したクラスに変えると MDIの子ウインドウがちゃんと表示されます。 <現在のソース:エラーが出る箇所> hDoc = CreateWindowEx( WS_EX_MDICHILD, "AtlAxWin", "Shell.Explorer.2", WS_CAPTION | WS_VISIBLE, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, hClient, NULL, hInst, 0); ご存知の方いましたらご教授願います。
とりあえず子ウインドウ毎にWM_CREATEで"AtlAxWin"クラスの コントロールとして作ることにしました。
ダイアログベースのプログラムを作りました。 開発環境はVC++.NET WinXPです。 NT系での正常動作を確認しました。 しかし、9x系ではうまく動きません。 具体的に言うと、 ダイアログの文字列が文字化けしてしまう。 GetKeyState() GetAsyncKeyStateが動かない。 という問題があります。 何故でしょうか?
9x系の動作確認はビルド後のexeを互換モード設定してやると とりあえず擬似的にできるのでデバッグしてみると文字化けくらいは 解決するとおもわれ
ExitWindowEx()
をつかってウインドウズを終了させようとしました。
開発環境は
>>26 で言っている通りです。
で、終了されません。
GetLastError()は、「権限がない」とか言っているんですが……。
アドミニストレータ―権限でログインしているんだけどなあ。
MSDNよんだら、AdjustTokenPrivileges()を使えとか書いてあるんですけど、
これの使い方が分かりません。
だれかサンプルを書いてもらえないでしょうか?
それと、9x系だったら、こういうことは考えなくても良いのでしょうか?
こんな感じか? 権限の種類がアドミニとかって話じゃないんだと思うが BOOL ExecuteShutDown() { HANDLE hToken = 0; TOKEN_PRIVILEGES tkp; OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken); LookupPrivilegeValue(0, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)0, 0); if(GetLastError() != ERROR_SUCCESS) { // 権限なし return FALSE; } ExitWindowsEx( EWX_SHUTDOWN , 0 ) ; return TRUE; }
>>29 >>30 うわっ!
レス早い!
どうもありがとうございます。
言えかえって試してみよう。
(これ、学校から)
32 :
デフォルトの名無しさん :04/01/13 20:50
SHFileOperation(FOF_ALLOWUNDO) で行ったUNDO可能なファイル操作を、 実際にUNDOするには何を使えばよいでしょうか? また、このときのUNDOで何が起こるか (エクスプローラのメニューで「元に戻す」を選択したときに、ステータスバーに表示される文字列) を取得するにはどうしたらよいでしょうか?
VC++でダイアログにスタティックコントロールでラベル貼って それがフォーカス取得できるようにするにはどうすればいいですか?
>>33 VC++でダイアログにスタティックコントロールでラベル貼って
それがフォーカス取得できるようにする。
自分のプログラムのみ、レジストリへの書き込みを禁止させる方法ってないでしょうか?
VC上のリソースエディタから作った、 ラジオボタンにBS_3STATE又はBS_AUTO3STATEのスタイルを付けるには どうすればいいのでしょうか? グレイ表示したいのですが、上手くスタイルを設定出来なくて困ってます。
>>24 まずどんなエラーが出るか書け。
話はそれからだ。
>>26 Unicodeビルドになっていないか?
39 :
デフォルトの名無しさん :04/01/14 15:35
C++ Builderで発生している事なのですが どうもWin32絡みのことのようなので質問させて頂きます fopen、fread、処理、fclose という処理があるのですが freadの途中で、対象ファイルが無くなってしまった場合 (CD-ROM等に入っていて、それが取り出された場合など) ドライブからメディアが取り出された、どうしますか みたいなメッセージが出てきてしまうのです このメッセージは止める事ができるのでしょうか? できるのならば、方法を教えてください、お願いします
40 :
デフォルトの名無しさん :04/01/14 15:38
ちょっと質問したいんですが、IPアドレスって犯罪とかでプロバイダー に警察とかが照会求める以外で、特定されることってあるんですか? 個人のレベルでIPアドレスから住所とか個人情報を抜き出すことって 可能なんでしょうか? それと、メッセンジャーって今はじめてダウンロードしたんですけど ファイル共有できるんですよね。まだ使ったことないんですが、 友達とかと音楽とか交換した場合、やばいことになりますか? もちろん違法ってことはわかってるんですが、一般的にそういうことは 行われてるんですか?誰かに音楽を送った場合相手が受け取って それが知り合いだった場合、そのプロセスの間に誰か介入してきて 逮捕されたりってあるんでしょうか? 初心者なので教えてください。友達がファイル交換しようって言って くるんですが、心配なので。
自己解決の模様 まだ検証してないが SetErrorMode(SEM_NOOPENFILEERRORBOX); のようだ
>>27 試してみました。しかし、問題が再現しない。
まさかUnicode?
そんなわけないでしょうし……。
これは別の話ですが、互換モードを95/98/MEにしてやると、
ExitWindowsEx一発でシャットダウンできました。
互換モードにするとAPIの挙動も変わるんですね。
>>30 コピペしました。
いったい何をやっているのかを理解していないのですが……。
どこかに分かりやすく説明しているサイトがないかなあ。ググってみます。
MSDNって分かりにくい。
高校生だからなんなんだ 免罪符にでもなるとおもっているのか
> どこかに分かりやすく説明しているサイトがないかなあ。
>>29
女子高生なら優しく教えてあげるけどな
じゃあいまから女子高生ということにしてください
免罪符ってインチキカトリック教会に、法外なお布施をしないともらえなかったのでは? それと、残念ながら、漏れは男です。(女ってここにいるの?) ところで、フォントの設定について教えてくれませんか? 実は、AAを表示するプログラムを書いているのですが、どうもうまくいかないのです。 MSDNのCreateFont()に書いてある通り、ポイントから高さへ変換する方法を使ったのですが、 微妙にIEと異なります。 レイヤードウインドウにして重ねてみると良く分かるのですが、 IEの方が、縦に長い&横に短い となってしまいます。
>>48 nWidthは0にしたか?
つーか、どうやって指定したのか書かんと原因がわからないだろうが
#include <windows.h> #include <stdio.h> void main(void){ for(;;){ if(GetKeyState(VK_RETURN) & 0x8000) Printf("Enter key is pressed.\n"); Sleep(1000); } } だれか、これを9x系で試してくれませんか? NTだとエンターキーが押されたときにコンソールにその旨が出力されるんだけど。 98だとうまくいかない。
家ではネットにつなげないから、ソース晒せない。
>>49 もちろんゼロにしています。
>nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
↑MSDNに載っていた方法
エディットボックスに出したときと DrawTextで書いたときとではもしかして高さと幅バラバラになるのか?
女子高生ですがJAVAを教えてください
女子高生ですがHSPを教えてください
>>51 では家に
>>30 のソースはどうやって持ち帰ったのか
逆のことをすればよい
56 :
デフォルトの名無しさん :04/01/14 18:13
>>50 GetAsyncKeyState と間違って使ってない?
GetKeyState は、APによってメッセージキューから取り出されたキーボードイベントが
発生したときのキーボードの状態だよ( WM_KEYDOWN / WM_KEYUP とかを受けて、
Alt キー押されてたかな、とかいうときに使う)。
んなこたぁない
8ビットのBMPをCreateDibSectionで作りました。 その後SetDIBColorTableでビットマップのパレットを変更して再描画したのですが、画面に反映されません。 しかしアプリケーションを切り替えて再びアクティブにすると、画面の色が正しく更新されています。 アプリケーションが切り替わるときに何かパレットがアップデートされるようなメッセージが飛んでいると予測し、切り替えて戻る時のメッセージをデバッグしましたがわかりません。 それらしいと思ったのはWM_QUERYNEWPALETTEですが、自分で送信しても何も起こりませんでした。 何が悪いのでしょうか。教えてください。 OSはPocketPC2003です。
RealizePaletteとか
マウスのボタンが押されているかどうか調べる関数ってないですか? マウスのボタンがダウンしていたら、スライダーを移動をスルーするという事をしたいのですが・・
>>62 レスありがとうございます、なんとかなりました
64 :
デフォルトの名無しさん :04/01/15 13:33
>>56 キーボードイベントには限らないと思うけど。
イベント処理と関わり無く監視したいなら Async の方じゃなきゃダメですね。
逆に Alt + Click みたいのを判断するときには Async じゃダメ。
GetKeyState()でも、
GetAsyncKeyState()でも、
9x系では動かないのです。
>>50 のコードは、
自分の持っている、WinXPでは動き、友達の2KやXPでも動くんですが……。
女子高生ですがSEXを教えてください
VK_RETURN以外のコードは試しましたか?
>>67 はい。
0x41(A key)
とか試したんですが……。
いずれも、
NT系では動作する。
9x系では動かない。
コンパイラはVS.NET アカデミック
ボーランドのフリーなやつ使ってみようかなあ。
ずっと押しっぱなしでもダメなの?
>>68 Windows98で試してみた。駄目だった。
9x系のコンソールはDosエミュレートだから NT系のコマンドラインウインドウとは違う動きをするのかもしれない Cランタイムとかでしかうまくいかないかも
>>68 for(;;){
printf("%04X", GetKeyState(VK_RETURN));
}
なんてするとどう表示される?
ReadConsoleInput PeekConsoleInput WriteConsoleInput この辺か?
>スレッドがメッセージキューからキーメッセージを読み出すたびに、この関数が返すキーの >状態は変化します。キーの状態は、ハードウェアによる割り込みレベルの状態を反映しません。 >割り込みレベルの情報を取得するには、GetAsyncKeyState 関数を使ってください。 GetKeyStateの説明。 GetMessageしないと話にならない
>>72 とりあえずやってみます。
ところで話は変わるんですが、
現在のウインドウの内容を、ビットマップファイルで記録したいのですが、
どうすればいいのでしょうか?
やはりビットマップファイルの構造を知っていないといけないのでしょうか。
なんか簡単なAPIはありませんか?
じゃー、なぜNT系では動くんだ?
>>74 それはGetKeyboardStateの説明だろ
GetKeyState
>>74 こう言う事ですか?
でも、NT系では普通に動作するなあ。
それに、実際のプログラムでは、ウインドウプロシージャ―の中に書いているんですが……。
#include <windows.h>
#include <stdio.h>
void main(void){
MSG msg;
for(;;){
PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
if(GetKeyState(VK_RETURN) & 0x8000)
Printf("Enter key is pressed.\n");
Sleep(1000);
}
}
コンソールにウインドウプロシージャってあるの?
>>77 GetKeyStateって言ってるだろうが。
>>78 動いたとしても想定外というか保証外といったことだろ?
ウインドウプロシージャの中に書いて動かないんだとしたら
多くのテキストエディタとか動かなくなる可能性があるけど。
>>75 プログラム内だけで使うならDDBでいいと思うよ。
メモリDCとディスプレイDCの両方に出力するか、メモリDCに書き終わった後WM_PAINTでBitBltするとか。
まず、BITMAPINFOHEADER構造体があって 次に、BITMAPINFO構造体があって そして、画像データ。(GetDIBits()を使う?) ということでよろしいのでしょうか?
>>80 コンソールではありません。
>>82 普通にビューワーを使って開けるビットマップを作りたいんです。
>>50 でコンソールと言ってたんで
読み間違えですか...
>>83 ちがう。
BITMAPINFOはBITMAPINDOHEADERとカラーテーブルをまとめた構造体のこと。
DIBに関しては、中身はこうなってる。
1.情報ヘッダ
2.カラーテーブル
3.ピクセルビット
詳しく言うと1はBITMAPCOREHEADER, BITMAPINFOHEADER, BITMAPV4HEADER, BITMAPV5HEADERがある。
2は1, 4, 8bppのビットマップはかならずカラーテーブルがある、16以上のbppも一応もてるけど持たなくてもいい。
詳しく説明するとキリがないかもしれん。
プログラム内だけで使うのならDDBでいいんだけど、DIB使うならもうちっと勉強しないとだめだね。 Displayのピクセルを記録しておきたいだけなら、 hdcMem = CreateCompatibleDC(hdc); hBitmap = CreateCompatibleBitmap(hdc, width, height); SelectObject(hdcMem, hBitmap); これでビットマップをメモリDCにセットして、あとはHDC使ってカキカキすればいい。
>>87 ググったけど難しい。
FDに落として家でじっくり読むことにします。
余談だが高校生よ。 なんでも聞いてばかりでは上達しないぞ。 たしかにピンポイントで答えは得られるかもしれんが、自分で解析するってことはそれだけその問題に たいして時間を費やして考えることであり、忘れない知識として持つことができる。 さらには今現在の知識を振り絞って考えることからある種の関連を導き出せたりね。 もちろんデバッグにも役に立つ。 あとは、UIとGDIは一応網羅的に把握していないとやりたいこと実行できるLvではないかもしれん。 このへんは書籍やWebから学べることだからキッチリ押さえておくといいよ。 #偉そうなこと言ってる俺もプログラミング歴8ヵ月のアマチャソなんだけどね、お互い頑張ろう
家かえってみるなら、wisdomのビットマップのところ見て基本を押さえてMSDNをよく読むこと。 そしたらググって使い方書いてるサンプル探して要点をまとめること。 ただし、DIBに関しては詳細に書いてあるWebは少ない。
そこは俺も参考にした。 とくにピクセルデータ操作関数は参考になるけど、画像処理部門になりそうだ。 ビットマップについて把握したらwin32API関数とどっか参考になるクラスライブラリでも見ながら 自分で基本的な操作関数つくって、その後にピクセルデータ操作のアルゴリズムとか考えるべきかな。 やってみればわかるけど圧倒的にDIBSectionのほうが扱いやすいし、APIとの連動もとりやすい。
>>82 鼻息荒いようだが
>16以上のbppも一応もてるけど持たなくてもいい。
この書き方ってどうよ?
殆どダウトだぞ?
普通のDIB使うなら、
>>91 のように構造体定義して操作関数つくっておくと細かいこと考えなくていい。
欲を言えば、win32関数の引数になる値は保持しておいて迅速に使えたほうがいい。
ウィンドウスタイルを変更した時の更新のタイミングを教えて下さい。 例えばスクロールバーを付けたり外したりする時に 1、GetWindowLongでスタイル取得 2、DWORD値をいじる 3、SetWindowLongで値を設定 とやった時に画面上ではすぐ更新されず、一旦「アイコン化->元に戻す」とやらないと 変更が反映されません。(InvalidateRectでも不可) 取り敢えずCloseWindow/OpenIconとすれば反映されますがなんかダセーです。 この変更を実際に画面に反映させるスマートな方法ってなんかありますかね?
>>95 説明があいまい、まあ高校生にパレット説明してもわからんだろうからいいんじゃない
>96 ShowWindowだとおもわれ
>96 PostMessage(hWnd, WM_SIZE, 0, 0); ってやってごらん。 ところで、MSDNには、 「SetWindowLong 関数を使って何らかのウィンドウデータを変更した場合、SetWindowPos 関数を呼び出してその変更を有効にしなければなりません。この場合、uFlags パラメータには、SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED を指定してください。」 と書いてあるけどなんかやってみた?
>>99 さいしょそれでやろうとして更新できないのでアレ?と…
>>100 PostMessageは効きませんでしたが、SetWindowPosでSWP_FRAMECHANGEDを
指定してうまくいきますた
でもこれVC++4のヘルプには書いてなかったよ…これからはMSDNも確認しまつ
皆さんマリガトウ
>>101 いくらなんでもVC++4のヘルプは古すぎると思われ。
>>60 やっとできました。どうやら256色BMPをウインドウに転送するには、SetDIBitsToDeviceを使わないとダメだったようです。
テキストエディタ作ってます。 IMEの変換を受け取るとき、デフォルトの変換ウインドウでは エディタ上の文字とずれが生じ見栄えが悪いので、 自力で描画を行おうとしているのですが、どうすればいいのか分かりません。 変換中の文字の描画はImmGetCandidateListで取得した結果を表示すればいいのですが、 変換ウインドウを非表示にしたまま入力を有効にする方法がわかりません。 どなたかご存知ないでしょうか?
GetCandidateじゃなくてGetComposition〜の方でしたね。 文字変換の自力描画はたしかMSWordとかがやっていたと思うので そのとおりのやりたいのですが、何か方法は無いでしょうか
VC++4のヘルプ見たことないなぁ
>>66 InitCommonControlSex()
108 :
デフォルトの名無しさん :04/01/16 11:23
ExitWindowSex()
SagE X
WaitForMultipleObjectSex()
それらのAPIはOS「彼女」「嫁」「ソープ嬢」でお使いください
>>111 それ買うよ!(;゚Д゚)ノ いくら!?
>>107 肛門コントロールSEXは女子高生には早すぎたかも…
115 :
デフォルトの名無しさん :04/01/16 15:09
ソケット使ってファイルを送るのってどうやってやるのでしょうか? send()、recv()メソッドだと文字列を送るっぽい(?)のは分かったんですが ファイルを送るにはどうしたらいいのでしょうか? ファイルを送るメソッドってあるんですか? どなたかご教授お願いします。
>>115 ファイルを読んでsend()
recv()で受け取ったのをファイルに出力
これで送れるよ
>>115 すれ違ってないか?
というより君は
単にファイルを送るアプリをつくりたいのか
Winsock直叩きでファイルを(ry
そこをはっきりしれ。
君の質問内容は後者に該当しそうだが、君が後者を選ぶ理由が思い当たらない
118 :
全てのウィンドウを最小化 :04/01/16 20:35
Winキー + M で全てのウィンドウを最小化することができますが、 これを Visual Basic からやりたいと思っています。 しかしデスクトップ以下のウィンドウ全てに対して ShowWindow で 最小化した結果と、Winキー + M で最小化した結果は違うようです。 具体的にはWinキー + M での最小化ではいくつかのウィンドウが 除外されているようです。 Winキー + M での最小化では、最小化すべきウィンドウを どのようにして判定しているのでしょうか??
>>118 EnumWindows()して、IsWindowVisible()だったら
ShowWindow(SW_MINIMIZE)するとか?
適当スマソ
結局仮想キーコードを送ってWin + M することにしました。
一定期間キーボードやマウスからの入力が無かったら自動的に終了する ようなアプリを書きたいと思っています。 最後の入力からの時間を返してくれるAPIというのは無いでしょうか?
WS_OVERLAPPEDを持っているかどうかじゃないか?
>>123 なるほど、タイトルバーの有無で判定するということですね。
よさそうな気がしてきました、まだ未確認ですけど。
ペイントソフトの選択範囲を表す鎖線を、ちょっとずつ動かすにはどうすればよいのでしょうか。 PS_DASHまではわかりましたが、動かす方法がわかりません。
>>125 5角形ABCDEを作り、BCDEが矩形の頂点にくるように配置する。
Aが辺EB上を動くように動かしながらPolyLineで描画。
うまくいくかどうかはシラネ
127 :
デフォルトの名無しさん :04/01/16 23:05
TAPIを使用して電話の発信/着信を行っているのですが 着信時の相手先情報(電話番号とか)はどのようにして取得するのでしょうか? ナンバーディスプレイ対応の電話機で相手番号の確認は出来たのですが プログラム中での取得が出来ません。 『このAPIで出来る』とかご存知でしたら教えて頂きたく...
"Win32"APIにあるのか…?
>>127 前に聞いたときには「できない」という結論だった
昔、ナンバーディスプレイの番号を シリアルポートかなんかで 通知してくれる製品があったな。 あれ買っとけば良かったかなぁ。
ISDN回線用なら昨日もヨドバシで普通に売ってたがアナログ回線用は…
133 :
デフォルトの名無しさん :04/01/16 23:51
>>121 「一定時間」のタイマーを張って、入力があったらリセットという実装ではダメ?
134 :
デフォルトの名無しさん :04/01/17 11:15
どうも。 文字列で FindResource と SizeofResource を使う必要が出てきて、 ちょっと試しに使ってみたのですが上手くいきません。 void CTesMFCDlg::OnButton1() { HINSTANCE hInst = AfxGetResourceHandle(); HRSRC h = ::FindResource(hInst, MAKEINTRESOURCE(IDS_STR1) , RT_STRING); TRACE1("h = %d\n", h); DWORD size = ::SizeofResource(hInst,h); TRACE1("size = %d\n", size); } で h=0 size=0 と返ります。 なにゆえにこうなるのか理解不能です。どなたか助けてぇ MFC上でのテストですが、IDS_STR1はStringTableにちゃんと入れてます。
>>121 > 最後の入力からの時間を返してくれるAPIというのは無いでしょうか?
2000以降で GetLastInputInfo。
9x系まで考えれば無い。
とりあえずGetLastErrorはやってみたのか?
GetLastErrorすると 1814 The specified resource name cannot be found in the image file. ERROR_RESOURCE_NAME_NOT_FOUND らしいです。でも、rcファイルでは ・・・ STRINGTABLE DISCARDABLE BEGIN IDS_STR1 "テスト用文字列" END ・・・ なんですけどね
>>137 #include "Resource.h"
>>137 HINSTANCE hInst = AfxGetInstanceHandle();
だとどーなる?
140 :
デフォルトの名無しさん :04/01/17 14:32
>>135 > 2000以降で GetLastInputInfo。
> 9x系まで考えれば無い。
ありがとうございました。
たぶん自分では探し出すことができなかったと思います。
コモンコントロールで教えて下さい。 ステータスバーやツールバーをつけたWindow内に子Windowを作るとツールバーやステータスバーの 上に子Windowが描画されてしまうんですが、これはどうやって回避するんでしょうか?
142 :
デフォルトの名無しさん :04/01/17 19:38
: error C2440: '=' : 'long (__stdcall CDebugPrint::*)(struct HWND__ *,unsigned int,unsigned int,long)' から 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)' に変換すること はできません。(新しい動作 ; ヘルプを参照) この変換が可能なコンテキストはありません。 というエラーがでます。 ウィンドウクラスを定義する関数を作って、その中でクラスの定義を行っているのですが、それがいけないのでしょうか? また、その関数はクラス内のメンバ関数です。 答えにもっと情報が必要ならば返信します。よろしくお願いいたします。
自己解決。乱文すいませんでした。
すいません。やっぱわかってないみたいです。 ご教授のほうよろしくお願いしますm(__)m
クラスのメンバ関数を普通の関数として使うことはできない。 普通の関数かstaticメンバ関数にする。 なんどめだナウシカ
147 :
デフォルトの名無しさん :04/01/18 04:38
RegisterClassEx()がNULLを返す場合とは、どのような事情があるんでしょうか?
>>147 関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、GetLastError 関数を使います。
spy++を使っていて気になったんですが、 あのウインドウの枠を強調表示するにはどのようなAPIを使えばいいのでしょうか? それとも、あれはspy++が自前で描画しているのでしょうか?
自前で描画してる
151 :
デフォルトの名無しさん :04/01/18 11:51
MCIに関して質問です。 フォーマットをMILLISECONDSにした状態で CDのトラック毎の始めと終わりの正確な位置を知りたいのですが、どうしたらいいでしょうか?
>>127 ATコマンド直打ちでやったような気がする
>>148 ありがとうございます。
エラー情報の獲得等扱って、エラーコードを見たんですが、
エラーコードは「0」でした。。。
CreateWindowから帰ってきた値が「0」だったので、えらーが起きてると思い、
エラーコードを獲得したら、それも「0」でした。
エラーコードの獲得は、えらーが起きたと思われる関数の直後に呼び出す。で
いいんですよね?
コモンコントロールって誰も理解できない程のハイテクなんすか?
void Test(int n = 2, int m = 2 ){ return; } 引数が2つあって、1、2番目ともデフォルト値がきまっているとします このとき、 2番目だけ値を設定したい場合 Test(○ ,1); ○の1番目はどうしたらいいですか?
どこがWin32APIの質問なんだ
>>154 CreateWindow?
RegisterClassExの直後じゃないの
>>157 自分で値を入れるしかない。
プロトタイプで n=2 はわかっているわけだから
不可能ではないでそ。
WinAPIについて分かってないのが結構入ってくるな… もしかしてWinでつくるAPplIについての総合質問だと思われてないか?
たしか非MFCのウインドウズプログラミングスレと統合したんじゃなかったか? API質問(だけの)スレなんていまさらほとんど需要ないだろうし 大抵の質問者はウインドウズプログラム一般として扱ってると思うぞ
スレ違いでしたか・・?
164 :
デフォルトの名無しさん :04/01/18 21:07
>>162 >API質問(だけの)スレなんていまさらほとんど需要ないだろうし
私物化すんな
# デフォルトCなのは賛成しながらも疑問だが
166 :
デフォルトの名無しさん :04/01/18 22:09
複数のウィンドウプロシージャ間で変数の値を渡す(共有する)にはどうしたらいいですか?
ばかやろう! 他のスレでスレ違いとかいわれりゃ じゃこっちのスレで質問すればええかと思って貼ってんじゃネーかよ なにがマルチじゃ ボケ、そんなことでわざわざ書くなよ 暇人が アホどもが バーカ
168 :
デフォルトの名無しさん :04/01/18 22:24
DDBで1ピクセル単位の操作をしたいのですが、可能でしょうか? DIBに変更すれば出来るのはわかっているのですが、できればDDBのままでやりたいです とりあえず、DDB画像中の指定した位置の1ピクセル分の値を得るということをしたいのですが・・・
SetPixel/GetPixelで良いじゃん 別にこれはイメージをDIBに変更しているわけじゃないし。
>>167 > じゃこっちのスレで質問すればええかと思って貼ってんじゃネーかよ
>>> あらゆる質問はまず すれ立てるまでもない質問はここで スレにしてください。 <<<
板のルールも守れないくせに暴れるな。
ちなみに、答えは向こうのスレの 160 で出てる。
せっかく答えを書いても、マルチする奴はこいつみたいに元の方を見なかったりするから嫌われる。
懺悔します。 私、コモンコントロールをサブクラス化したくって original = (WNDPROC)SetWinidowLong(hwnd, GWL_WNDPROC, (LONG)myWndProc); ってやって、その myWndProc の中の最後で CallWindowProc 使わずに return (original)(hwnd, msg, wparam, lparam); とかやってました (;´Д`) だって Win2k で問題なく動くんだもん (;´Д`) WinMe(たぶん9x系全部) だと挙動不審 (;´Д`) ていうか発狂
>>151 MCI つってもいろいろあると思うんだが、
mciSendString を使ってるんなら、status コマンドか何かでいけた気がする。
とりあえず、ぐぐれ。
>>172 それでコンパイル通るのか...
試したくなってきた!!!
>>172 それのどこがダメなのかがわからない・・・
>>172 ウィンドウの文字コード(A or W)が一致していれば、一応動くんじゃない?
UNICODEでビルドしてたのか?
>176 172ではありませんが w95 EDITで死にました(当然 A)。
WinNTで、QT_Thunkのようなレイヤってないですかね?
>>178 「実は16ビットで実装してますた」というものはNTには
一切ないからできても無意味だと思うが。
何がやりたいのかもっと具体的に書くべし
9x系とNT系を判別して、A系とW系を使い分けているのですが、 これを9x系のOSで実行しようとすると、使っていないW系のコードが入っているだけで、 プログラム開始エラーになります。 コメントアウトすると動くことを確認していますし、W系の場所が呼ばれていないことも確認しました。 一体何が原因でしょうか。こういう場合、どうしたらいいのか、教えてください。
dllで呼び分けるとかだめ?
>>180 ・GetProcAddressを使って動的にAPIをロードする。
・DLLの遅延ロードを使用する。
・TCHARマクロ等で9x/NTでバイナリを分ける。
・9xでサポートされていないAPIは使用しない。
9xでもW系のAPIはスタブが入ってるから 存在するだけでエラーが出るのは 単にAPIのサポートの問題だと思うが
>>179 WinNT上のWin32アプリからでWin16DLLを呼び出したいということです。
DLLのソースを失い32bit化することが出来ないので
そのまま再利用したいのです。
mciSendCommandです 少し前はTMSFフォーマットで操作させていたため、トラックの始めの箇所を指定するのは容易でしたが 今回スライダーを導入するため、フォーマットをミリセコンドにしました。 とりあえずぐぐってもMSDNとにらめっこしてもわからなかったので、質問したわけです(^-^;)
この前、アクロバットリーダー6.0をインストールしたら、 英文の読み上げ機能がついていました。 これをやりたいのですが、どうも情報がありません、 MSAAというものだとは思うのですが。
じゃぁMSAAについて調べたらできるよ
ググっても、MSAAとは何ぞや的なサイトしかヒットしません。 MSDNでも、障害者にも使いやすいデザインなんかがあります。 具体的にどうすれば使えるのか、説明しているところはありませんか?
189 :
デフォルトの名無しさん :04/01/19 17:32
スレッドを作成するとそのハンドルが作成されますが、このハンドル 以外にも生成したスレッドに渡るハンドルというものがあるのでしょうか? 作成するスレッドの処理の先頭にブレークポイントを設定し、 スレッド作成元にてCreateThredやbeginethreadexをコール すると当然ハンドルがひとつ増加しますが、 その後スレッド処理の先頭にブレークがかかった際に再度ハンドル数を 確認すると何故か更にひとつ増加しており、このハンドルがクローズ できずに困っております。 初心者ですみませんがご存知の方よろしくお願いいたします。
生成されたスレッドは自分自身への参照を持つ。 スレッドが終了すれば消える。 CreateThreadが返したハンドルを閉じただけで参照カウントが 0になったらまだスレッドが生きてるのにスレッド情報が 開放されてまずいでしょ
自己解決しました、申し訳ありません。 やり方としては、FORMAT_TMSFにして、トラックの先頭を指定し、その位置にシークさせ それからFORMAT_MILLISECONDSに戻して、その位置を取得することで出来ました。
192 :
デフォルトの名無しさん :04/01/19 18:02
>>190 すばやい回答ありがとうございます。
助かります。
スレッド側でハンドルが増えるのは当然のことだったのですね。
スレッド側でExitThreadや_endthreadexをコールし、その後スレッド
作成側でWaitForSingleObjectでスレッド終了を待った後、
スレッドハンドルをクローズしてもハンドルが一つ増えたままになって
いたので、スレッド側で増加したハンドルもクローズする必要が
あるのかと思ってしまいました。
スレッド終了でクローズされるということは、当方のスレッド終了
方法に問題があるようです・・・処理を見直してみます。
>>184 サンクという仕組みで32bit<->16bit相互に呼び出せる。
別に難しいこたぁない。
thunk とか WOWでぐぐれ。
windowsXPでnotepad.exeのロードアドレスは、0x01000000になりますが、 これのメリットって何ですか。
スナックのママに自慢できる
キャバ嬢にモテる
弱酸性で地肌にやさしい(赤ちゃんも洗えます)
200Gets!
>>201 スナックのママはなんでも聞いてくれるけど
APIについては教えてくれないからな
盛り上がってるところすみません。 外部アプリ、例えばメモ帳が起動された事を常に検知したいのですがどのようにすれば可能でしょうか?
そこで右フックだ!
FindWindowしまくる
>>193 おお、こんなところにSDKが! おーしこれを使えば……ってデカすぎ!
>サンプルコードとドキュメント、SAPIと開発用のUS版スピーチエンジンが欲しいなら、Speech SDK 5.1 fileを落とせ。
>日本語版や中国版の開発用エンジンが欲しいのなら、Speech SDK 5.1 Language Pack fileも落とせ。
>もし、製品にスピーチAPIやスピーチエンジンを組み込み、製品として配布したいなら、Speech 5.1 SDK Redistributables; All fileを落とせ。
解釈は間違っていませんよね? やれやれ、理系なのに数学が赤点ギリギリで、英語がトップな香具師(=漏れ)はそういないと思います。
それにしてもデカいなあ。
Speech SDK 5.1だけで68MB
Language Packが81.5MB
Redist : Allに至っては131.58MB
とりあえず落とすのはSDKと言語パックか、これだけで149.5MB。
ところで、最後のRedist : Allは落とす必要がありますか? 商用目的でなければいいの?
組み込む(原意:統合する)ってどう言うことでしょうか?
=アプリ内で使う、と思われ。それで英語トップ?
インストールができませんとか言って来そうだよな…(w
RedistributablesはSpeech APIを使ったアプリの動作に必要なファイル一式だベ。 藻前はSDK入れとけばいいけど、エンドユーザにはRedistributablesが 必要になる。
>>203 NOTEPAD.EXEを挿げ替えるだな
ローテク侮るべからず
>>195 WinNTで32bit→16bitはないと思うが。逆はあるけど
>>203 if メモ帳が起動されている ニョホ
これをループしまくる
みなさんありがとうございます。 やっぱしそうそう都合のいいメッセージとかないんですね。 期待していたのは「アプリが起動された事のメッセージが 通知される」事だったんですが、そんなのいちいち全アプ リに発行なんてしてらんないですもんね。 >204さんや>205さんのようにフックで見張って>206さんや >214さんのようにFindWindowとかでやるしかなさそうですね。 >212さん「挿げ替える」辞書で調べました。 実際はNOTEPAD.EXEだけじゃないので今回は駄目なようです。 FindWindowとかは実際はタイマーでチェックするんでしょう けど、そうするとタイミングによっては駄目なので、仕様から 見直してみます。 ありがとうございました。
>>216 タイマーでFindWindowって…
フックの使い方知ってる?
スレッドでfindwindow!(プ
>217-218さん マウスとキーボードのフック位しか経験ないです。 では、今回の場合は何をフックすればいいのか… まぁ私がバカな事を言ってるのでしょうからこれでお終いでいいです。 バカなりに調べてみます。
フックとFindWindowを同時に使おうというのが根本的に間違い まったくの別物
↓こんなコードでアプリの置かれた環境独自の数を取得できますか? #include <windows.h> int get_serial() { char drive[MAX_PATH]; GetWindowsDirectory(&drive[0], MAX_PATH); drive[3] = '\0'; DWORD serial; if(!GetVolumeInformation(&drive[0], 0, 0, &serial, 0, 0, 0, 0)) { return 0; } else { return serial; } }
>>221 コード読むのマンドクセ
環境独自の数ってなんだよ
環境変数の数のこと?
Winがインスコされてるボリュームのシリアル番号を、MACアドレスみたいな ものとしてみなせるかみなせるかって話しだと思う。
>>222-224 読みにくいコード、非常に申し訳ありません。
224さんの仰るとおりです。ただ、完全に唯一無二である
必要はなく、同じ物があまりでない程度でいいのですが…
メーカー製PCの同一モデルとかって、どうなってるんだろうか?<ボリュームのシリアル番号
以前、販売しているフォーマット済みFDを数枚試してみたらシリアルは全部0だった。
あと、OSのシリアルとかは割れを除いても、会社で複数台同じPC購入するとOS入れなおしのときに 別のマシンのシリアルいれたり、複数台入れなおすときなんて全部同じシリアル入れるとかへーき
>>216 メディアプレイヤが起動してるかチェックしたときに使ったコード
hWnd = ::FindWindow(NULL,_T("Windows Media Player"));
if(hWnd){
::SendMessage(hWnd,WM_CLOSE,NULL,NULL);
Sleep(1000);
}
これをループで回せばいいんじゃないのか
>>227 うちでは数枚同じものがありました。
>>228 それはWindows xpのProduct Activationにも使えますか?
フロッピーのボリュームIDに意味はないだろ。
diskcopyで同じディスク作れるし。
>>230 XPは知らんけど、2000まではサイトライセンスというものがあって、
複数マシンに同じProduct IDでインストールするようになっていた。
だから、OSのProduct IDはマシンの区別には役立たないと思った方がいい。
勉強中の分際でシェアウェアでも作るつもりか?
233 :
デフォルトの名無しさん :04/01/22 07:26
WindowsのTCP/IPのプロパティで設定されている DNSサーバーの設定を取得する方法をご存知の方、 教えていただけないでしょうか。
>>229 これ
起動されることを確認じゃなくて
起動していることを確認だね
起動していることが前提ならメッセージフックだって可能
>>234 ループで回して監視してりゃいいんでないの?
どっちも一緒でしょ
>233 GetPerAdapterInfo GetAdaptersAddresses あたりでねーか。
あ、GetNetworkParamsもあったな。
238 :
デフォルトの名無しさん :04/01/22 15:35
CreateFontにある文字の高さとセルの高さの違いを教えてください
内部レディングを含めるかどうか。
友達にSpeech SDKを落としてもらいました。 今日インストールするつもりです。 どうもマイクが必要なようですね。
なるほどこのスレは名前に高校生と入れると何を書き込んでもいいんですね
ここまでで、241以外の『高校生』は皆同一人物です。
(V)∧_∧(V) ヽ(・ω・)ノ フォッフォッフォッ . / / ノ ̄ゝ . (V)∧_∧(V) ヽ( )ノ フォッフォッフォッフォッ . / / .......... ノ ̄ゝ
別に、音声入力しないならマイクは要らんだろ。
>>232 いやいや、まさか^^;
ちとProduct Activationに興味を持っただけです。
皆さん、ありがとうございました。
Product Activationはヴォリュームのシリアル番号も見てたよな
247 :
デフォルトの名無しさん :04/01/23 00:55
WindowsXPでエクスプローラなどから mpeg や jpeg などの動画や画像ファイルの プロパティを見ると、「概要」タグがありキーワードやコメントなどを編集することができますが、 このキーワードやコメントをファイルから読み書きするためのAPIといったものが用意されているのでしょうか? MSDNで探すにもキーワードが間違っているのか見つかりませんでした。 ヒント、キーワードだけでもいいのでよろしくお願いします。
>>247 ヘッダーのコメント部分かなんかに書いてあるだけじゃねぇえの?
>>248 そう思い、コメント、キーワードの文字列を変更してバイナリエディタで比較したのですが
Jpegに関しては Exif フォーマットでヘッダー部にコメントなどが埋め込まれ実際にファイルサイズも変わります。
しかしMpegの場合はコメントなどを変更してもファイルサイズ、中身はまったく変わらないのです。
そのためOSの機能としてAPIが提供されているのではないかと思いまして。
それって動画じゃなくて実行ファイルでも出るんじゃね? 多分NTFSのオルタナティブストリームじゃないか?
>>250 NTFSファイルシステムの機能として用意されているかもしれないということですね。
ありがとうございました。
おまい、NTFSは何の略か言ってみろ。
>>252 「Exifフォーマット」も同じ間違いですね。すいやせん。
254 :
デフォルトの名無しさん :04/01/23 10:18
jpegやpngをDDBなどに読み込んでビットマップのように表示したいのですがそのためのAPIとかはあるんでしょうか? それ用のライブラリなんかを使わないとダメでしょうか?
>>225 ユニークな識別子を作るというならCoCreateGuidがあるけど。
>>254 Win98/2000以降ならBITMAPINFOHEADERのbiCompressionにBI_JPEG/BI_PNGで
SetDIBitsToDevice()でいけそうだという話もあるが、素直にlibjpeg/libpng使った
ほうが多分楽。
後はOleLoadPictureもその辺のフォーマットサポートしてた気もするが。
jpeg/pngはディスプレイデバイスではサポートされてないそうだが
レスありがとうございます。 取り合えずlibjpeg/libpngでやってみようと思います
GDI+が忘れられている・・・
インストールできました。 今までのサム君に加えて、マイク君とマリーちゃんが使えるようになりました。 だが、肝心のC++のチュートリアルサンプルが動かない。 コーヒーっていう音声認識のサンプルです。 CreateWindow時にエラーとなってしまいました。 さらにデバッガで追っていくと、 WM_CREATE時に、 初期化をしていて、そこでエラーになっているようです。 ISpRecoGrammar::LoadCmdFromResourceの戻り値が、-2147200942となっていました。。 SPERR_LANGID_MISMATCH 0x80045052 -2147200942 An attempt to load a CFG grammar with a LANGID different than other loaded grammars. う〜む。どこで読み込んだものが、互いに違っているのか? すでにあったコンパイル済みのものを動かしてもエラーになるし……。
LanguagePackあてておかしくなったとか...
>>261 なるほど、確かにLanguagePackをあてています。
さて、どうすればいいのでしょうか?
コントロールパネルで標準の音声認識エンジンを変えればいいのでしょうか?
それとも、パックをアンインストールする必要があるのでしょうか?
>>255 ハードウェアが変わらない条件下では何度呼び出しても
常に同じSerial Numberを生成するようにしたかったので、
CoCreateGuidは使えないんです。
せっかくレスいただいたのに、申し訳ありません。
自分がDQNだとわかっているなら自制しろ
コントロールパネルの音声認識に、新しいタブができていました。 プログラミング以前の質問、申し訳ありません。
267 :
デフォルトの名無しさん :04/01/24 13:21
API じゃ無いけどここで良いかな? たまーに Segmentation Violation なんかで異常終了してしまう DLL を呼ぶ 必要があるんだけど、この手の DLL 側の致命的エラーでアプリケーション 自体を異常終了させたくない時どうすれば良いですか? 出来れば「○○が 異常終了しました」とかポップアップ出して操作を続行させたいんですけど。
Win32構造化例外を捕捉する。
>>268 __try〜__except(...) って奴ですか? 調べてみます、どうもでした。
> __try〜__except(...) って奴ですか? 調べてみます、どうもでした。
ちがぁ〜う! ちゃんと嫁。
>>268 は"Win32構造化例外"って、ちゃんと書いてんだろが。
C++例外とSEHを混同すんな。
>>270 C++の例外はtry〜catch()〜だろ。
VC++だとcatch(...)でSEHまで捕捉されるけどな。
272 :
デフォルトの名無しさん :04/01/24 16:33
プリンタの設定を変更したいのですが、VBからDocumentProperties APIを呼び出し、以下のように実行すると、 2回目のDocumentProperties で ERROR_INSUFFICIENT_BUFFER (システムコールに渡されるデータ領域が小さすぎま)というエラーが出ます。 この原因が分かりません。バッファのサイズは十分にとってあります。(そもそも bytDevMode はポインタ(byref) で渡しているのでデータ領域が分かるかどうかが疑問です。。。) どのような原因が考えられるでしょうか? もしご存知の方がいらっしゃいましたらよろしくお願いいたします。 ' DEVMODE構造体のバッファサイズを取得 lngBufSize = _ DocumentProperties(Me.hWnd, _ lnghPrinter, _ Printer.DeviceName, _ ByVal vbNullString, _ ByVal vbNullString, _ 0) ReDim bytDevMode(lngBufSize - 1) ' 現在の設定を取得 lngWin32apiResultCode = _ DocumentProperties(Me.hWnd, _ lnghPrinter, _ Printer.DeviceName, _ bytDevMode(0), _ ByVal vbNullString, _ DM_OUT_BUFFER)
>>273 ご回答ありがとうございます。
bytDevMode の dmSize (bytDevMode(36),(37))に値(=156)を入力して
みましたが、やはりうまくいかないようです。
DM_OUT_BUFFER を指定しているので構造体を取得するだけなので、
bytDevMode は初期値のまま(0クリア)で渡していました。
APIでは、こちらに渡すときに、サイズのチェックとかがあって
渡す必要があるのでしょうか?
>>274 ちょっと、DocumentProperties の Declare 定義見せてくれる ?
あと、dmSize に値入れる時のエンディアンは問題ないよね ?
>>275 >ちょっと、DocumentProperties の Declare 定義見せてくれる ?
Declare 定義です。
Declare Function DocumentProperties Lib "winspool.drv" _
Alias "DocumentPropertiesA" _
(ByVal hWnd As Long, _
ByVal hPrinter As Long, _
ByVal pDeviceName As String, _
pDevModeOutput As Any, _
pDevModeInput As Any, _
ByVal fMode As Long) As Long
>あと、dmSize に値入れる時のエンディアンは問題ないよね ?
bytDevMode(36) = 156
bytDevMode(37) = 0
としました。おそらく大丈夫だと思います。
引数の渡し方の問題でしょうか?
bytDevMode は、受け取るときはdmSizeだけに値を入れたのですが、
他にも設定が必要な項目がありますか?
277 :
デフォルトの名無しさん :04/01/24 18:25
実行プログラム自身のファイル名を取得する方法を教えてください。 開発環境はVisualStudio C++で、非コンソールプログラムになります。 コンソールプログラムならば main関数の argv[0]がファイル名になりますが、非コンソール プログラムの場合はどうすれば良いかと悩んでいるというわけです。
279 :
デフォルトの名無しさん :04/01/24 18:42
Win32APIに関係ないかもしれませんが、WindowsのProduct Idは、 全バージョンのWindowsにおいて、レジストリの HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion で取得することができますか?
できま
どっち(w
未来永劫そうなるとは誰もいえない
お聞きします。 通信系のプログラムをつくっていますが、 RS232Cを複数回線つかうと、 Win95上で動作させたときにくらべて Win2000/XPで動作させたほうが遅くなります。 しかもWin95はPentium100Mで動作、 Win2000はPentium3で動作させているにもかかわらず、です。 何か対処策があるでしょうか。
OSによって処理を分ける
シリアルポートのコントローラ、ドライバ、BIOS設定が違うから。
287 :
デフォルトの名無しさん :04/01/25 03:42
APIを使って、FTPからサブディレクトリを含む全てのファイル名を 取得したいんだけど、どうやったらいいですか? FtpFindFirstFileとやらを使うってのは分かったんだけど サブディレクトリ以下が取得できない( ´・ω・) 教えてくださいませ。
自分で再帰的にたどるしかないだろう。 下手するとものすごい時間を取るだろうが。
NetBios名をつかった通信はできるのでしょうか。 プロトコルはNetBeuiのみで、です。
>>289 名前つきパイプ。Mailslot。
つか、「できますか?」って聞いてるってことは答えはbool値でいいのか?
292殿、ありがとうございました。 調べてみます。 質問の仕方も勉強しときます。。。
使用するWin32APIについて教えていただきたく思い質問致します。 古いスタイルのオープンダイアログにおいて(OFN_ALLOWMULTISELECTをしていするオープンダイアログ) 右側にあるディレクトリを選択するツリービューを作成するにはどのようなWin32APIを使用すればいいのでしょうか。 ツリービューで自作しようと試みたのですが、あそこまで快適なものをつくるには私はあまりにもスキル不足です。 どうかご教授お願いします。
>>295 IShellViewかIShellFolderでググルと答えが見つかるかも?
297 :
デフォルトの名無しさん :04/01/25 19:02
>>288 どうやって再帰的にたどるんですか?
最初にファイルだけ取得して、その次にディレクトリみたいに
たどるんですか?ん?なんか訳分からなくなってきた。
>>297 FtpFindFirstFile()とInternetFindNextFile()の組み合わせでディレクトリ内の
サブディレクトリを含めたファイルのリストが取得できる。
そのうち属性がディレクトリのものに対してそのディレクトリに移動して以下略。
WIN32_FIND_DATAについても調べろ。
>297 ファイル/フォルダを再帰的にたどった経験は無いのか?
う〜む 下みたいに書いてみたけど、最初のサブディレクトリ見に行ったら終わっちゃう・・・ 再帰が終わったあたりにFtpFindFirstFileをもう1回使ってみたら、今度は、 無限ループみたいになるよ。検索の開始位置って指定できるの? Private Sub serFtpFile(strPath As String, lFtpSession As Long) Dim lFindSession As Long Dim lRs As Long Dim tmpFileInfo As WIN32_FIND_DATA Dim strTmp As String mSerPath = strPath lFindSession = FtpFindFirstFile(lFtpSession, mSerPath, tmpFileInfo, INTERNET_FLAG_RELOAD, 0&) If lFindSession <> 0 Then Do mFtpFileNum = mFtpFileNum + 1 ReDim Preserve mFtpFileInfo(mFtpFileNum) As WIN32_FIND_DATA mFtpFileInfo(mFtpFileNum) = tmpFileInfo If tmpFileInfo.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY Then DoEvents
続き strTmp = strPath & StrConv(mFtpFileInfo(mFtpFileNum).cFileName, vbUnicode) strTmp = left(strTmp, InStr(strTmp, vbNullChar) - 1) & "/" lRs = InternetCloseHandle(lFindSession) Call serFtpFile(strTmp, lFtpSession) mSerPath = left$(mSerPath, InStrRev(mSerPath, "/", Len(mSerPath) - 1)) End If lRs = InternetFindNextFile(lFindSession, tmpFileInfo) If lRs = 0 Then Exit Do Loop End If lRs = InternetCloseHandle(lFindSession) End Sub
うわ、見難い・・・
C言語からやり直しましょう
Cかよ!
>302-303 MFC でエクスプローラ風のFTPクライアントのサンプル作ったことあるけど、 再帰的処理はできずじまいだった。 ひとつのFTPセッションに対して複数の検索セッションを 作成することはできないような動作だった。 つまり Folder1/Folder2/Folder3 の階層があるとして、 Folder1 のファイル/フォルダを列挙している最中に、 再帰的に Folder2 のフォルダを列挙しようとしても Folder1 ですでに検索セッションが使われているから Folder2 の検索セッションの作成に失敗するみたいな。 以上、経験則です(根拠はありません)
ポップアップメニュー(TrackPopupMenu)についての質問です。 ボタンを利用したメニュー(CreateToolbarEx)を作成しているのですが、 ポップアップメニューがモーダルなのか、 表示させたまま他のメニューを検知することが出来ずに悩んでいます。 (例えば「ファイル」のポップアップメニューを表示させたまま「編集」にマウスを移動させても、 「編集」のメニューが表示されないということです。) 専用のメッセージがあるのでしょうか? それともポップアップメニュー側で何らかの処理をしなければならないのでしょうか? (BCC + BCC Developer で作成しています。)
>>308 マルチセッションじゃなくてひとつの列挙が終わるまで待って次にいけばいいだけ
>308 まあ、そのサンプルではフォルダツリーを展開するタイミングでファイル、 ファイル/フォルダ一覧を列挙するようにしたから支障はなかったけどね。 まあ俺の経験則が事実だったとしても フォルダ内のファイル/フォルダを列挙、検索セッションをクローズした後で、 サブフォルダを再起処理すれば、検索セッションは複数になることはないから 階層が深くなっても列挙できると思われ。
う、先を越された。。。
FFFTPのソースでも見てみたら。
313 :
デフォルトの名無しさん :04/01/25 22:19
API本に載ってた以下のコードで「未定義のシンボル item」という コンパイルエラーが出ます。(コンパイラはBCC) TVINSERTSTRUCT tvs; tvs.item.mask = TVIF_TEXT; 試しに tvs.DUMMYUNIONNAME.item.mask = TVIF_TEXT; と打ってみたらコンパイルが通ってプログラムも動いたのですが ネットで検索してもどのサンプルコードも tvs.item.mask という風になっているのでどこか自分が間違っていると思うのですが どこが悪いんでしょう?
>>313 #define _WIN32_IE 0x0300
こんなの使ったら出なくなるだろうね。 なんで共用体使ってるかは知りません。
TVINSERTSTRUCT tvis; CString str; // ルートは1つだけの方が良いです。 tvis.hParent = TVI_ROOT; tvis.hInsertAfter = TVI_FIRST; tvis.itemex.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;; tvis.itemex.pszText = "ルート"; tvis.itemex.iImage = 0;// 通常時の画像 tvis.itemex.iSelectedImage = 1;// アイテムが選択されたときの画像 俺のサンプルコードでは itemex 使ってるな。 VC++だけど。
たぶんUNION周りの言語仕様に関係あるんでは? 構造体の定義を見ると、 #define _WIN32_IE 0x0300 だとUNIONが含まれないから、逆に item を選べると思う。
>>314-316 #define _WIN32_IE 0x0300 を試してみましたがうまくいかずです。
ちょっと簡単にわかりそうにないんでしばらく共用体名を入れて打ってみます。
UCS2だかUTF-16に変換した後 ルールに沿ってUTF-8にすればいい
現在、Win32 API で画像ビューアを作ろうとしています。 (使用するためというよりは、勉強のためです) 現在の仕様は 1. CreateDIBSection() でオフスクリーン(クライアント領域のコピー元)を作成。 (BMP-A) ※ サイズは GetClientRect() で取得したサイズ分です。 2. 表示対象画像を CreateDIBSection() で作成した領域にロードする。 (BMP-B) 3. ロード完了時に BMP-B をオフスクリーンである BMP-A に StretchDIBits() で 転送する。 4. WM_PAINT メッセージではオフスクリーンである BMP-A を BeginPaint() で 取得した物理デバイスコンテキストに対して StretchDIBits() で転送する。 以上のような感じで作っています。 初めは、オフスクリーンと呼ばれる物を介さず、ロード画像である BMP-B を 直接物理デバイスコンテキストに転送していたため、チラツキがあったのですが この問題を解消する事ができました。
しかし、この状態でウィンドウのサイズを変更されると オフスクリーンは、元の大きさのクライアント領域のサイズ分しか 持っていないためウィンドウサイズを大きくされると左上に寄って 表示されてしまいます。 色々考えて、現在のディスプレイの解像度分の大きさを確保すれば どんなにウィンドウサイズを大きくしてもそれを超える事は無いと 思ったのですが、起動中に解像度を変更されたときの事なども 考慮しなくてはならなかったりと、苦戦中です。 そこで質問なのですが、画像ビューアなどのアプリケーションは どんな仕組みで作っているのですか? それとも、現在作成中の画像ビューアの仕様の考え方は 根本から間違っているのでしょうか? いろいろ考えたのですが、なかなか良い方法が思いつきません。 よろしくおねがいします。
ウィンドウのサイズが変更されたら裏画面作り直せばいいんでないの?
>>319 >UCS2だかUTF-16に変換した後
…それはどうやればいいのでしょう?
>>322 レスありがとうございます。
タスクマネージャを起動しながらフリーの画像ビューアを動かして
メモリの動きを観察したのですが、画像オープン時にメモリに動きはありましたが
ウィンドウサイズを変更したり拡大や縮小を行ってもメモリに変化がなかったため
何か特殊な方法があるのかなと思い質問してみました。
良いお知恵をお持ちの方がいましたらよろしくおねがいします。
>>326 普通の画像ビューワは裏画面使わず、元画像をStretchDIBitsで直接表示してると思うけど。
モノが画像ビュワーなんだから、 ・画像ファイルのサイズにあわせたDIBSectionを作ってそこに画像展開。 ・描画要求があった場合適宜そこからBitBlt。 だろ、普通。 ちなみに最小ウィンドウサイズ以下の画像を読んだときは最小ウィンドウサイズに あわせたDIBSectionを背景色で塗りつぶしてから画像展開、 最大ウィンドウサイズは画像サイズまでに制限、ということをしておくと WM_ERASEBKGNDを省けるのでウィンドウリサイズ時のちらつきがほぼなくなる。
VBプログラマ質問スレ(6.0以前) Part31から来ました 客先からメッセージボックスの変更以来がありました "続行","再入力"と"続行","中止"です。 オリジナルでダイアログボックスを作ってはダメ といわれました。どうすればキャプションを変更できるのでしょう?
そんな客との取引をやめる。
別スレッドからボタンのテキストを書き換える
MB_CANCELTRYCONTINUE で作ってあとは運用回避って仕様にしてもらう
>>320 ビューポートとかそのあたりを調べてみたらいーと思う。
334 :
デフォルトの名無しさん :04/01/26 17:43
すいません。 writefile関数を使ってファイルに出力しようとしているのですが ***********, *******, のように1つのデータをカンマで区切って改行させたいのですが ご教授ください。 VC WindowsXPです。
writefile("***********, \n*******, \n");
>>334 Win32APIとは特に関係ないかと。
文字列バッファ確保して [,]を[,\n]に置き換えて保存。
あたりまえだが、WriteFileってバッファの内容をを保存する関数です。
バッファの内容を書き換えるのは自分自身。
改行させたいなら\r\nにしないと化けるぞ
ここ投稿頻度すごいな……。
>>338 第1段階:シリアルポートの通信を理解する
第2段階:ソケット通信を理解する
第3段階:両者のIFを橋渡しする
今どのへんなんだ?
>>341 今はまだ、木曜までにスケジューリングするとこです。
3月半ば目処って言われてるけど、いかんせん先がまったく見えません。
自分はCしかわからないんですけど、どうなんでしょう…
>>342 おまいのスキルおよび
どの程度のものを要求されてるかによる
338のリンク先みたいなレベルのだったら
ドライバ作らないといけないから結構きついぞ
>>342 動作させる環境は分かってるの?
DDKは持ってる?
俺も結構きついんじゃないかと思う。
>>343 ドライバ作ってくれと言われました。
ものとしては、リンク先のもので言えば
仮想シリアルポートの設定ってのだけできればいい感じなのです。
>>344 環境はWin2kですね。
DDKは確認してみないとわかりませんが、たぶんあると思います。
周りもきついって言ってますね…
会社でこのスレ見れればいいんですけど、2chはロックかかってるんですよねぇ…
★スタンダード版価格 ライセンス数 シングル 3 5 10 定価 12,800 38,000 62,000 120,000 ※消費税が別途かかります
注文か
そこのを相談したんですけど、金は出せないみたいに言われました
名前入れますね。 そこのってのは338のURLのです。
>>348 10万かそこらの金が出せない?じゃぁあんたの人件費は誰が出すんだ?
>>350 to C で売る製品に使いたいんじゃないの?
例えばFAX モデムを仮想化して、「インターネットで FAX が送れるサービス」とか。
そういう用途だと1ライセンス1万だとあれだよね。
>>350 予算の問題なのでしょうがないんです。
>>351 市販する製品ではないんですよね。
アプリ(PC1)----シリアルケーブル----データ管理アプリ(PC2)
現状がこういうのですが
アプリ(PC1)----ドライバ----データ管理アプリ(PC1)
このようにして使いたいそうなのです。
>>352 シリアルポート複数ついてて、両端のアプリが使用ポート変えられるなら
アプリ(PC1/COM1)----シリアルケーブル----データ管理アプリ(PC1/COM2)
つー感じにできる気がするな。
>>353 ポートは両方のアプリとも変えられます。
ただ、シリアルケーブルを必要としない環境にしたいみたいです。
つーか、アプリ書き換えるならともかく、それだけのために仮想シリアルドライバ作るって 絶対コスト計算間違ってるな。
やっぱり結構でかいんですかねぇ… とりあえず今日は寝ます。 助言くださった皆さんありがとうございました。 明日進歩なかったらまた来るかも… もしくは会社でなんとか見れればなぁ…
大学のLANに穴あけるためだけに仮想Ether作った奴も いることだし、お前もがんばれよ。
>>357 大学のLANに穴あけるためなのか・・・
359 :
デフォルトの名無しさん :04/01/27 01:56
質問です。 NTFSでハードリンクを使いDLLを2つに見せた場合のDLLのグローバルデータに関する物です。 そのハードリンクを使ったDLL達(A.DLL, B.DLL)にプロセス(P)がアタッチしたとします。 その時、A.DLLとB.DLLのグローバルデータは全く別物となるのでしょうか、それとも同じ領域 になってしまうのでしょうか。 スレ違い且つ実験しろって感じの質問で申し訳有りませんが…。
>>359 別物
Win32プロセスについて勉強しろ
まさかグローバル変数を共有させないように DLL を2つにしているとか? ご苦労さん。
違うよ…。 #pragma なんちゃらってやると全てのプロセスでグローバルな変数が作れるじゃんさ…。 そっちのグローバルデータの事を言いたかった。正式な呼び方が分からなくてすまんか った。 兎に角そっちのグローバルデータの場合に就いて聞きたい。
そうだったんですか、どうも。
なんか危なっかしいな。 素直にメモリマップドファイルで共有して、 共有したいプロセス間でオブジェクト名を 一致させた方が安全な気がするけど…
仮想COMって結構簡単にできたきがしたけどなぁ... 数年前のインターフェースって雑誌に特集あったような気がする バックナンバーしらべたらでてくるかもしれない
質問なのですが、 かなりいろんなサイズのフォント作成して、 TextOutするアプリを作ってて、Win2kまではフツーに動く。 が、 XPで動かすとTextOut終わってフォントDeleteしても 仮想メモリが増え続けて、アプリを終わらせないと 戻らない。(リソースの明示的リークはないと思う) こんな現象に出くわした人いますか?
AllocConsole();で開いたコンソールウィンドウを、プログラムから最大化できるのでしょうか?
>>368 原因がそれ以外にあることは考えられないですか?
別の解放忘れがないか確認はされてますよね?
>>370 100%とはいいませんが、いらない要素を削って
あれこれテストプログラムを作成しても
再現してますので、別の理由ではないと思うんですが。
MSのExcelXPをWinXP上で起動して、セルに文字つっこんで
表示倍率変えまくったりしても程度の差こそあれ、
似たような現象が出て、仮想メモリサイズが
肥大化するんですよね。
何かのキャッシュとして裏で取られているのであれば、
破棄の方法が知りたいところなんですが。
携帯から失礼します。 VB.netとCで作るDLL間で構造体の配列の受け渡しをしたいのですが上手くできません。 どうすれば実現出来るか知っている方いますか? 板違いでしたらスイマセン
自己解決できました。
>>371 OSのキャッシュの持ち方が違うんでね?
実害がなければほっとけば良いと思う。
>>372 同一スレッドならばポインタを渡してやれば良いだけだと思うんだが・・・
値渡しにしてみるとか、メモリマップドファイルを使うとか。
XPは良い意味でも悪い意味でも厳格にいろんなもの取得してくるからねぇ キャッシュもがっちりもってるかもしれない
>>290 ご回答ありがとうございます。
>Me.hWnd, lnghPrinter, Printer.DeviceName,ngBufSize,はちゃんと取得できてる?
一応、全部それらしい値がはいっていました。
>Redim()の値を巨大(数万)にして試してみては。
>bytDevMode の配列の宣言はどうなってる?
bytDevMode(731)でした。
bytDevMode(10000)で試してみましたが、結果は同じでした。
>あと、Option Base 1 にはしてないよね。
大丈夫でした。
>>374 困ってます。
アプリケーションの作りがあまりよくないのかも
しれませんが、マッピングモードを使わずに
無段階に表示倍率変更できるので、
気がつくと数100Mなんてことになってます。
表示方法を根本的に変更しないと対応不可ですかねぇ。
>>374 どうして素直にP/Invokeのことを教えてあげないの?
>>378 .NETだったんだね。見落としてたよ。
>>356 別にデバイスドライバはでかくもないし、
>>367 が書いてる通り COMM ぐらいならそんなに難しいわけじゃない。
ただ、お作法が普通のアプリケーションと違うし、何よりバグった時に OS もろとも死んじゃうことも多々あるわけだから、デバッグがちと大変。
「将来デバドラ作ることも多々あるから、今回は勉強だ〜。」とか言う目的があるならともかく、今回の目的のためだけに作るというなら
>>355 が正しい。
ユーザーモードドライバなんだからOSが死ぬことはないだろ
383 :
デフォルトの名無しさん :04/01/28 03:13
ビットマップとかの画像を回転して(表示する角度を変えて)表示させたりするには自力でやらないと無理でしょうか? そのためのAPIとかは無いでしょうか?
384 :
デフォルトの名無しさん :04/01/28 06:39
Win32APIで開いたファイルハンドルから、fgets()で文字列を読みたいときは どうすればいいのでしょうか? fgets()相当のWin32APIはあるのでしょうか? あるいは、HANDLE->FILE*へ変換することはできるのでしょうか? おねがいします。
>>384 最初からfopenで開けばええじゃないか
>>384 SetFilePointer
ReadFile
あたりはどうですか?
>>384 APIじゃないけど_open_osfhandleとfdopenでFILE*に変換できる
>>383 自力でやらなくてもできるよ
APIあるよ
教えてやれよケチンボゥ
GDI+?
>>383 NT/2000とかならPlgBltとか
9Xは知らない
質問です。 クライアントで「通常使用するプリンタ」に設定されているプリンタをサーバ側から取得する事って可能ですか?
MCIからMPEG(動画)を再生できますか?
mpgもaviも再生できたよ、確か
396 :
デフォルトの名無しさん :04/01/28 18:16
APIのネームの前についている「Rtl」やら「Ldr」やらZWってのはどういう意味があるんでしょうか? 名前がプレフィックスだと言うところまでは分かったんですが、それ以上は・・・。
それDDKじゃねーの?
NTDLL.DLL を覗いたんかね
>>385 ,386,387
ありがとうございます。
_open_osfhandleとfdopenを調べてみます。
400 :
デフォルトの名無しさん :04/01/29 09:58
DDEとして登録してある拡張子のファイルをダブルクリックしたとき、 エクスプローラはどういうコードを実行しているのでしょうか? いろいろ調べてみたんですが難しいです。 ヒントだけでもお願いします。
>>400 (゚Д゚)ハァ?
何がしたいのか正直に言ってみ?
エクスプローラと何か関係あるのか?
エクスプローラというより、ShellExecute()というべきだったかもです。
>>402 レジストリ見てDDE設定があったらDDE通信するだけじゃネーノ?
単にcommand filenameとして実行しているだけでは。実行ファイルにD&Dした時も同じ。
漏れは未だに>400が何をしたいのかわからん。 DDE送りたいだけなら送ればいいし ShellExecute()使いたければ使えばいいだけぢゃん。
>>396 RtlはRuntimeの略(Cランタイムの代わりにカーネルモードで使う関数など)
LdrはLoaderの略(モジュールのロード関係)
Zwは謎
DDEを送りたいです。 で、ShellExecuteと同じようにDDEを送るにはどうすればいいのかが わからないのです。
>>408 キーワード的には
動的データ交換管理ライブラリ
かなぁ…
>>400 適当に見当つけて "DDESPY" でググって見たらそれらしいものがヒットしたよ。
使ってみれば?
>>409 ,410
ありがとうございます。DDESPYを使いながらいろいろ調べてみます。
検索しても出てこないから困ってたんです。 407さんありがとうございましたー・・。
413 :
デフォルトの名無しさん :04/01/29 19:19
質問です。 たとえば Filet="c:\test.txt" として、これを プログラムで使える形に"c:\\test.txt"にする方法を ご教授願えませんでしょうか。
\を\\にすればいい。 てゆうか\\なんかプログラムで使わねーがな。
Windowsプログラム作っていたら、作っているフォルダに RCa02372 RCa03936 RCb03936 Rca01756 などと言うファイルが知らない間に出来ていました。(拡張子なし) 全てのサイズが4.01KBでファイルの種類が”ファイル”と書いてあります。 これは何なのでしょうか?知らない間に出来ていたので少し気になります。
>Windowsプログラム作っていたら おまえのプログラムが作ったのかもしれないし IDEが作ったのかもしれないし 何らかの管理プログラムが作ったのかもしれない 情報を小出しにするなボケ
ああ、RCファイルね
少し気になるぐらいだったら大丈V 俺は全然気にしないよ
失礼しました。 説明が足りませんでしたが Filetの部分はシステムから得る文字列です。 OPENFILE構造体で ofn.lpstrFile = Filet; として このFiletの中身をc;\の部分にc:\\として \を付加したいのですが、どなたかご教授お願いします。
>>415 この前メールで届いたexeファイルを実行すると安全に削除できるよ!
>>419 それでも全く説明が足りていない。
"C:\"がどこから来たのか。
最初から"C:\\"と書き込んでおけば良いだけでね?
それかCStringT::Replaceか?
>>419 であれば、変換する必要など無い。
\\としなきゃいけないのはどんな場合かよく考えてみな。
423 :
デフォルトの名無しさん :04/01/29 20:44
ファイルを開くダイアログでファイルを選択し、そのパスを取得。 それがFiletに収められる。(c:\test.txt) VCでFiletの中身のc:\だとその文字列を パスと指定してやっても動作しないので c:\\test.txtといった形にしたい。
win32のDibセクションについて教えてください。 ウィンドウに直接描画するときはWindowsがハードに図形描画命令などを送るんだと思うんですが Dibセクション(メモリデバイスコンテキストに選択したやつ)にLineToなどを描画するときはソフトでビット配列に書きこむわけですか? それとも一度ハードに送ったりするんですか? あとDDBを選択したmemDCに描画するときもソフトでやっているんですか? 疑問なのでおねがいします。
煽り
427 :
デフォルトの名無しさん :04/01/29 20:55
画像を90度回転させてBitbltみたいにコピーするAPIってありますか?
実は無知なやつが
>>425 もまいはGDIだのドライバだのの存在理由を否定しているわけだが
431 :
デフォルトの名無しさん :04/01/30 01:55
ExtractAssociatedIcon という関連付けされたICONのハンドルを得るというAPIがうまくつかえない・・ --------------- HINSTANCE g_hInst; HICON hIcon; ・ ・ ・ switch(uMsg){ case WM_COMMAND: switch(wParam){ case IDC_BUTTON1: hIcon = ExtractAssociatedIcon(g_hInst, "c:\\test.txt", 0); ←この行で強制終了になります。 --------------- c:\test.txtに関連付けられたEXEファイル(メモ帳)のアイコンハンドルを 取得したいのですが、どうすればいいのですか? ちなみにIDC_BUTTON1はウインドウ上に作ったボタンのIDです。 WindowsXP VisualC++6.0です。
今年度のバレンタイン大作戦 女性店員がレジにいるコンビニでチョコを買う ↓ わざとチョコを受け取り忘れて店を出る ↓ 女性店員が走って渡しに来る「あの・・・これ・・・」 ↓ ちょっぴりバレンタイン気分
>>431 ExtractAssociatedIconの3番目の引数は WORD型の変数へのポインタ を渡さなきゃいけないので0じゃだめです。
WORD IconID=0;
ExtractAssociatedIcon(g_hInst, "c:\\test.txt", &IconID); こんなかんじで。
>>433 すばやいレス感謝します。おかげで正常に動きました。
HELPの LPWORD lpiIcon と書かれているところに引っ掛かってはいたのですが、
WORDで宣言して、0を代入して&WORDでアドレスにすればいいわけですね。
LPWORD IconID; で宣言したらどうすりゃいいのかなーと悩んではいました。
>>431 そういう指定のAPIたくさんあるから解決できてよかたね
ありがとうございます。
439 :
デフォルトの名無しさん :04/01/30 14:52
質問です。 DirectXGraphicsなプログラムを作っていて、必要が出てきて「猫でもわかる〜」を見ながら、 リストビューをつけました。 リストはウィンドウにうまく張り付いて表示されるように出来たのだけど、このリストを クリックしてしまうと以降、親ウィンドウのキー入力やらマウス入力のメッセージが 来なくなってしまうんです。一度ほかのプログラムを最前面にしたりすると直るんだけど。 どこを直したらいいですか?
それAPIの質問でなくて自分のプログラムのバグだろ スレ違いじゃね?初心者質問スレにソース貼って聞いてみれば?
>>440 それはもう間違いなくバグなのですけど、リストビューにキー入力を持って行かれない方法か、
あるいは親ウィンドウに速やかにキー入力を返却する方法自体が判らなくて調べもつかずに
弱っているのです・・・。
ああでも、おもくそ初心者な質問なので、初心者スレに逝った方が良さそうですね。
SetFocus
>>443 キー入力が戻ってきました!何とかなりそうです。
心から感謝します!
バグの隠蔽方法教えても仕方ないだろ
やっぱりバッファに書き出して配列いじくるしかないですか?
>>445 バグの隠匿じゃないよ
エディット、リストやツリーのような標準コントロールのうちいくつかは
自分がクリックされたときにキーボードフォーカスを自身に設定するので
自作コントロールでキーボード入力を受けたければ
そのウインドウをフックしたりするか、もしくは適切なタイミングで
キーボードフォーカスを設定しなおす必要がある
448 :
デフォルトの名無しさん :04/01/31 11:29
GetPrivateProfileStringA関数で文字列を取得した際に、 セミコロンのコメント部分まで読み込まれてしまいます。 どうすればコメント部分を省いて読み込んでくれますか?
>>448 セミコロンてどこでも書けるの?行頭だけじゃ?
450 :
デフォルトの名無しさん :04/01/31 20:43
あるEXEファイルが、コンソールアプリなのかWIN32アプリなのかを知るにはどうすればいいのでしょうか? お願いします。
PEオプションヘッダの中にあるSubsystemの値を見ればいい IMAGE_SUBSYSTEM_WINDOWS_GUI IMAGE_SUBSYSTEM_WINDOWS_CUI dosアプリケーションかということなら、 通常のexeファイルはdosアプリかつwindowsアプリなので、差は無い
ありがとうございます。 早速チャレンジしてみます!
たまにフリーソフトで見かける解像度変更ソフトで、 ChangeDisplaySettingsを使わずにリフレッシュレートを 設定している物があるんですが、 あれってどうやって実現しているのでしょうか?
質問させていただきます。 今エディットボックスにどんどんと情報を追加表示していくプログラムを作っています。 「複数行」「垂直スクロールバー」「垂直オートスクロール」「改行を許可」でエディットボックスをつくり、 SetWindowTextで流し込んでいます。 ・SetWindowTextだと全情報を転送してるのであまり効率が良くない気が。 エディットボックスに文章を「追加する」APIはありませんでしょうか。 ・改行して情報を追加しているのですが、やはり最新情報として一番下の行を眺めていたいもの。 エディットボックスのスクロールバーを一番下まで下げる(内容も一番下までスクロールさせる)には どんな感じにすればいいのでしょうか。 SetScrollPosでスクロールバーを下げるだけならできたのですが、 内容がスクロールしてくれません。 両方今のところMFCを使わず済ませたく思っています。 よろしくお願いします。
すいません、今ふと思いついた検索ワードからたどっていったら、 うまく2番目のほうは発見できました。 SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_LINESCROLL, 0, 65536); こんな感じでOKですね。 1番目の質問だけよろしくお願いします。
>>456 おれはこんな感じでやったことあるよ。
これが最適かどうかは自信ないけど。
void AddText(const char *msg)
{
int len;
len = GetWindowTextLength(hWNd);
SendMessage(hWnd, EM_SETSEL, len, len);
SendMessage(hWnd, EM_REPLACESEL, 0, (LPARAM)msg);
}
CWnd::SendDlgItemMessage
459 :
デフォルトの名無しさん :04/02/01 07:59
UNZIP32.DLLで解凍プログラムを作っています。 仕様書を見るとUnZipSetOwnerWindow関数で設定したウィンドウハンドルに、 解凍の進行状況に関するwm_arcextractメッセージを送信するとあるのですが、 「wm_arcextract」がヘッダーで定義されていません。 また、UNZIP32.DLLからのメッセージが来るはずのウィンドウを監視したのですが、 それらしいものは受信していないようです。 解凍進行中における情報が時々刻々欲しいのですが、どのようにすればいいのでしょうか。
>>455 ログの表示みたいなことがしたいんだったら
エディットボックスじゃなくてリストボックスという手も。
皆様ありがとうございました。 最終的にこんな感じになりました。 nPos = SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_GETSEL, 0, 0); n = GetWindowTextLength(GetDlgItem(hWnd, IDC_EDIT1)); SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_SETSEL, n, n); SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_REPLACESEL, 0, (LPARAM)(p.getComment() + n)); SendMessage(GetDlgItem(hWnd, IDC_EDIT1), EM_SETSEL, LOWORD(nPos), HIWORD(nPos)); 追加型だし、自動でスクロールしてくれるしGoodです。
462 :
デフォルトの名無しさん :04/02/01 10:49
VC6の質問です。 私はDEBUGとRELEASEの出力フォルダを同じにしてるのですが、 これだと、Releaseビルドしたあと、デバッグできなくなります。 出力ファイルを削除するなどの処理をすればいいのですが、 これを自動化する方法はないでしょうか?
↑同じにしてるのは .exe だけです。
そりゃReleaseしたら、DebugExeが上書きされてしまうのだからデバッグできなくなるさ。 何故一緒にしてるのかはわからんが、絶対に分けるべき。 Releaseはその名の通りRelease時にしか使わないし。
はい、デバッグできなくなる理由はわかってるんです。 問題はリリースのEXEがあって、かつDEBUG構成でデバッグをはじめたときに、デバッグの EXEを自動で作りなおすいい方法が見つからないことなのです。
>>465 DEBUG用のEXEの名前を変えたらどう?
>466 それだと、iniファイルとかも変わってしまうので(私の場合) ちょっとダメなのです。
要は、「Releaseフォルダの中にある各種設定ファイルをデバッグの時にも使いたい」 ということなのかな? そのためにDebugとReleaseを同じフォルダにしたいとか?
各種設定ファイルは○○フォルダの中に置かないぞ。 デフォだと起動場所はdswファイルと同じ場所ということになっている。 debug/test.exe release/test.exe test.dsw test.dsp main.cpp mode.ini ちゃんとdebug/release両方同じ動作mode.iniが読める
>469 CurrentDirectoryがdswのある場所になるということですよね。 私の場合CurrentDirに関係なくEXEのあるフォルダになってしまっています。 あと、自分自身への引数つきのショートカットとかもあちこちにあって、 起動されるEXEを統一したいです。
コマンドライン使えば? パラメータありならデバッグモードとして判定して読み込むiniファイル名も変えればいいじゃん
>私の場合CurrentDirに関係なくEXEのあるフォルダになってしまっています。 iniファイルがです。
473 :
デフォルトの名無しさん :04/02/01 13:18
>>469 はカレントディレクトリにiniファイルがあるという前提で
コーディングしているのか。
結構危険なやり方だな。
なんか発想が逆だな。 まず、リリースビルドとデバッグビルドでディレクトリ分けて作られるのを前提にして、 他の要因をリリースとデバッグで切り替えられるような機構を考えるべきだろう。 リリース版はともかくデバッグ版は自分の環境のみで動けばよいのなら、 デバッグ版に限れば絶対パスでiniファイルを読み込んでも良いんだよ (チーム開発してるなら別だが)
自分も、設定ファイルをdebugとreleaseで共用できないのが気に入らなくて、 - project - debug - release - config っていう構成にして、exe から相対パスで "../config/*" を見に行くようにしてる。
>>473 そ、そうなんですか?
今まで作ってきたツールもすべてカレントにiniがおかれているのを前提にしてました
(iniがなかったらデフォ設定で起動)
このスレで言うのもなんだけど、俺はC++でProfile系APIをラップしたクラスを作って、 任意のフォルダを指定できるようにしてる。 もちろんデフォルトではexeと同じフォルダにiniを置くようにしてる。
>>476 はっきり言って、カレントディレクトリは当てにならんよ。
ファイルダイアログ使ってカレント変わったらあぼーんだな
カレントじゃなくてモジュールの実行パスが欲しいんじゃないの? 作成中のプログラムのショートカット作成して、作成したショートカットのプロパティ で作業ディレクトリ変えてみな。読めなくなるから。 GetModuleFileName で起動した exe のパスを取得して、そこから ini ファイルの パスを作れ。
>>480 過去ログみればわかるけどそういう話じゃない。
バッチファイルでも作っておいて ビルドのたびに相互に.iniをコピーすれば? プロジェクトの設定の中のビルド後の処理で 呼び出すようにでもして。
483 :
デフォルトの名無しさん :04/02/01 18:40
初心者です。 右上の最大化とか最小化とかのボタンが変な数字とかになってるんですけど、何処を書き換えたらなおりますか?
>>483 『フォントキャッシュ』でgoogle
でも、何でこのスレ?
ネタですか? ネタじゃないなら初心者板へゴー!
486 :
デフォルトの名無しさん :04/02/01 22:47
ダイアログボックス上のツリービューについて質問します。 ラベル編集中にENTERやESCを押すとダイアログボックス自体が終了してしまいます。 この動作は、ダイアログボックス上のエディットコントロールと同様の動作なので、 当然のことと思っていました。 しかし、MSDN Q130691では、バグ扱いです。 編集を終了するかキャンセルするのが正しいとしています。 本当にバグなんでしょうか。
そりゃ、マウスなしで編集確定する手段がないのは困るぞな、もし。
>>487 なるほど、「確定」ですね。
ありがとうございます。
490 :
デフォルトの名無しさん :04/02/02 01:23
PathIsRelative()のサンプルを見て、こんなのを書いてました。 int _tmain(int argc, _TCHAR* argv[]) { char Path[] = "任意のパス"; if(PathIsRelative(Path)) cout << Path << "相対パス"; else cout << Path << "絶対パス"; return 0; } 隣家がエラーを出しました。 test.obj : error LNK2019: 未解決の外部シンボル __imp__PathIsRelativeA@4 が関数 _main で参照されました。 だそうです。 インクルードディレクトリを調べました。 ヘッダファイルは存在します。 LWSTDAPI_(BOOL) PathIsRelativeA(LPCSTR pszPath); との記述があります。 また、 #define LWSTDAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE とあり、呼び出し規約はきちんとしているみたいです。 どうして変な風に修飾されてるんでしょうか。 何かすごく基本的なことを間違えてるんでしょうか?
ライブラリリンクしてなかった・・・。 スレ汚してすいませんでした
>>487 なるほどという気になったのですが、さて、
ラベル編集に入るにはマウス操作が必要ですよね。
だから確定するときもマウスを前提にして良いのではないかと考え直しました。
それとも、マウス無しで編集に入る方法があるのでしょうか。
タブオーダーとか?
F2
>>494 ダイアログボックスでは不可、エクスプローラで動作しました。
ということは、実装すべしということですか。。。。(SDK)
#「バグ扱い」は言い過ぎでした。VC6付属のヘルプではBUGになっていますが、
# ONLINEでは変更されていました。
>>495 MSとかのキーボードになんかは右クリックの役割もってるやつあるじゃん。
Appキーっていうrの?右Ctrlの左にあるやつ。
エクスプローラなら、それからポップアップメニューから名前の変更(ラベルの編集)するってのもできるよ。
だから、特別実装するって必要もないのかな??とか。よくラベル編集するものならショートカットとしてF2で実装するとか。
#たまにエクスプローラのくせでF2押すことあるけど編集できないソフトだとちょっと萎え。
497 :
デフォルトの名無しさん :04/02/02 09:16
replace関数を使おうとしているのですが 定義されていない識別氏と出てきます。 algorithmをインクルードしています。 また、void replace(_FI _F, _FI _L, const _Ty& _Vo, const _Ty& _Vn) の引数をご教授願えませんでしょうか VC6.0 XP環境です。
498 :
デフォルトの名無しさん :04/02/02 09:20
選択されて(反転している状態)いるファイルの絶対パスを取得したいのですが、 どのような方法でやればよいでしょうか? 例えば、Cドライブのtmpフォルダ内のa.txtファイルが選択されていたら、 [c:\tmp\a.txt]を取得という感じです。
500 :
デフォルトの名無しさん :04/02/02 09:38
早く答えろよーーーーーーーーーーーーーー 寝てるんじゃねえよーーーーーーーーーーーーーqqw
>>499 Win32APIに関することで来いよ
わざわざスレ違いネタを引っ張り出すな
>>495 HOOKで行きます。 仕様を追加してくれたご親切な皆さん、感謝(涙)。
506 :
デフォルトの名無しさん :04/02/02 14:27
PathRemoveBackslash の使い肩を教えてください。 何かをinkcludeしてやるのが必要なのでしょうか
自分で調べることが必要。
なんでMSDN見ないんだよ。怒るよ!
URLを分解してくれるAPIってなかったっけ?
CreateFileでファイルを作成して そのファイル名が格納されるときに、c:\test\test.txtとして保存した場合 格納される配列をFileNameとすると、中身は"c:\\test\\test.txt"となっているのでしょうか そのFileNameを使用してiniファイルとして出力を WritePrivateProfileString関数で行い、最後の引数をFileNameにしているのですが うまく保存されません。どうしてなのでしょうか。よろしくお願いします。
・一行空け見にくい ・何を質問しているのかさっぱりわからない
>>510 どこで失敗しているのか、戻り値もチェックしないとわからん
デバッガ使えないのかな?
ステップで実行しながら戻り値や変数の中身をみるだけで勉強になるぞ
>>510 >CreateFileでファイルを作成して
>そのファイル名が格納されるときに、c:\test\test.txtとして保存した場合
この段階で意味不明っぽ。
hFile = CreateFile(FileName, GENERIC_WRITE,0, NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL); でファイル保存作業を行わせてから WritePrivateProfileString("SECTION", "THEME",rData, FileName); としてiniファイルを作り、そこにデータを保存したいのですが うまく保存されないんです。
>>517 保存する場所を選択できるような形にしたいので
CreateFileを使うと思ったので。
>>516 CreateFileしなくてもWritePrivateProfileStringは自動的にファイルを作成する
たぶんCreateFileでハンドル握ってるから保存されん
>>519 ハンドルを閉じたらできました。
ありがとうございます。
皆さん、ありがとうございました。
いやいや閉じるんじゃなくて作らなければいいのでは これじゃ毎回初期化されるが・・・
>>520 だれも閉じろなんて言ってないよ...
WritePrivateProfileStringってのは独自のファイルI/Oをもってるからさ
クリされてイジイジされるとこまるんだ
ファイル選択→WritePrivateProfileStringでデータ読込 ではますいんですか?
GetOpenFileNameでファイル選択すればいいんじゃないの? CreateFileはファイル選択するAPIではないとおもうが
>>524 ファイルがないときは自動的に作成されるはずだし、
あるときはそのファイルに書き込みされるはず。
だから、CreateFileするこたない。
ファイル選択とCreateFileは関係ないでしょ。
根本的に勘違いしてる悪寒
CreateFile自体必要じゃなかったんですね。
そもそもなんのためにCreateFileしようと思ったんだい? まさかおまじない程度?('A`)
最初はテキスト形式でキー値を出力させようとしていたので。
とてもしょぼい質問で申し訳ないのですが 最小化または最大化されているウィンドウを 元の状態に戻すAPIかメッセージは ありませんでしょうか? よろしくお願いします。
ShowWindow
アンチウィルスソフトとかって あるプロセスがファイルを開こうとしたら その前にファイルを開いてチェック ! みたいなことをやっているように思えるのですが。 こういうのってどうやってやるのですか? 標準のフックではAPIまでフック出来ないし・・。
Unicodeベースでソースを書こうと思い立ったので MessageBox(NULL, TEXT("ユニコードのメッセージ"), TEXT("ユニコードのタイトル"), MB_OK); といったコードを書き、UTF-8Nで保存してコンパイルしてみたのですが正常に表示されません。 使ったコマンドラインはこのようなものです(MinGW3.3.1): gcc -s -mwindows -O2 -o uni sample.c どのようにすれば正常に表示されるのでしょうか?ご教示お願い致します。 なお、UnicodeやUTF-8ではコンパイルエラーが出ました。 OSはWindows2000を使っています。
>>534 標準じゃないフック使ってるから。
ってAPIフックなんて半分標準みたいなもんだが。
>>535 それのどこがWin32APIなんだと小一(ry
534じゃありませんが、
>>536 なんとおもしろそうな。
もし良かったらその手の解説がのっているサイトを教えていただけませんでしょうか。
>>536 んなAPIあんの?
プロセス止めてテーブル書き換えてリスタートさせるしか方法ないんじゃないの?
APIというか、カーネルドライバを挟んでるんじゃねーの?
>>537 MessageBoxは立派なWin32APIだと思ってるんですが、違うんですか?
>TEXT("ユニコードのメッセージ") これはちゃんとUTF-2文字列になるのかが問題だな。 あと、UNICODEを定義しないとMessageBoxAが呼ばれるはずだが。
>>542 ありがとうございます。直接MessageBoxWを使ってみました(-DUNICODEをつけてコンパイル)。
コンパイルエラーの類は出ないのですが、やはりおかしな文字列が表示されます。
TeraPadを使ってソースを書いているので、UTF-2(現UTF-8N?UTF-8ではgccが文句を言います)保存のほうは大丈夫だと思います。
>>542 UTF-2などというものは存在しない。
UCS-2でしょ。
でも最近のWindowsはUCS-2ではなくUTF-16だったりするが。
つーか、MingwがUTF-8で書かれたL""をUCS-2/UTF-16に変換してくれるかどうかの 問題じゃないのか?
546 :
デフォルトの名無しさん :04/02/03 00:00
>>544 UCSは文字セットの名前
UTFは文字エンコードの名前
UCS-2の文字セットを16bit固定でエンコードするとUTF-16、8bit単位の可変長とするとUTF-8です。
で、質問なんですけど、不透明度アルファチャンネルを持つビットマップを描画するAPIってありますか?
>>536 > ってAPIフックなんて半分標準みたいなもんだが。
ってあるのですが。
そんなにメジャーな方法なのですか?
色々探し回ってみたけど、見つからなかったです(´・ω・`)
>>539 氏の方法がソレなのでしょうか?
再び検索の旅に逝ってきます・・。
UTF-16ってUCS4じゃなかった?サロゲートペアを考えると。
>>547 UTF-16はUCS-4をサロゲートで表記したものを言うのが普通。
サロゲートが存在しなかった頃の16bit Unicode時代のものをわざとUCS-2と呼んで区別する。
アルファチャンネル関連はDirectDrawかGDI+を使うしかない。
>>551 AlphaBlend忘れるなよ。
つか、DIBSectionあたりが相手なら自前でもそうたいしたコストじゃないか。
>551 DirectDrawつーか、Direct3Dの2D利用では。もう統合されたんだっけか。
>>546 フックの意味合いが違うと突っ込んでみる。
>>554 msimg32.dllってDirectXだっけか。
APIフックに興味がおありなら 「Advanced Windows」をご購入下さい
>>548 NT系なら、フィルタドライバかな。要DDK。
95系はしらん。
>>544 UTF-2はUTF-8の旧称
542は間違えただけだと思うが
TDI(Tramsport Driver Interface)周りの質問ってここでOK? WDMのほう逝け?
一応聞くだけ聞いてみれば? 無理ならWDM逝けばいいかと (マルチ氏ねっていわれるかもしれないけどな)
netstat -o(xp以降)のようなnetstat + プロセスIDをwin2000で実現しようとしています。 xp以降は散々既出な非公開関数で実現できるのですが、win2000ではググってみたところ NtQuerySystemInformationでハンドル-プロセスID情報を取得。 上記に対しgetsockname / getpeernameが有効であればこれを利用。 無効なら取得ハンドルからDeviceIoControlの制御コード0x210012 + 適当に情報を入れた TDI_CONNECTION_INFORMATIONからTDI_CONNECTION_INFOを取得。 のような流れが主流のようで、これで一応ローカルIP、ポート、プロセスID のデータを取得できています。が、TCPにおけるリモートIP、ポートや connection statusがうまく取得できていません。 TDI_CONNECTION_INFORMATIONを取得するような方法、または他の実現方法、 TDIに関する情報等ありませんでしょうか? DDKのサンプルには目を通していますが、今一バッチリとは来ませんでした。
↑snmp 系の API で取得できたような気がする。
564 :
デフォルトの名無しさん :04/02/03 16:42
例えばデスクトップ上のあるファイルをクリックしたら、 そのファイルのファイル名及びパスを取得できるようにするにはどうしたらいいでしょうか? 分かる方、お願いします><。
>>564 パス:SHGetSpecialFolderLocation
566 :
デフォルトの名無しさん :04/02/03 22:49
フルスクリーンで使うソフトを作っています。 起動中は使用者がほかのソフトに切り替えるのを防ぎたいのです。 何かいい方法はありますか?WINキーやALT+TABキーを殺したいのですが。
PreTranslateMessageでブロックすりゃええがな
でもな、ALT+TABとかALT+F4は残しとけ。教えといてなんだけどな
デバッガ使われたらまずいソフトでも作ってんのか?
570 :
デフォルトの名無しさん :04/02/03 23:17
566です 567さまありがとうございました。 568、569さま、子供用ソフトです。いじられないように。
571 :
デフォルトの名無しさん :04/02/04 15:54
>>566 別デスクトップ生成→そこで実行、もアリかな?面倒かもしれないし9X系だと使えないが。
572 :
デフォルトの名無しさん :04/02/04 17:51
Win32APIを使わず、windowを作るなんてこと出来るんすか? というかOSなしで稼動できるように・・・。
もう一回何言ってるのかわかるように説明してください
>>572 いくらでも出来ますが、このスレと関係ありません。
IEに貼り付けるムービープレイヤのActiveX作ってるのですが、 IE側でスクロールするとちらついてしまうので その間は描画を止めたいと思っています。 IEのスクロールを検知するにはどうしたらよいのでしょうか。 システムフックするしかないのでしょうか?
Win2000で、Win32_NTEventLogを参照して、イベントビューワ上で 表示されるのと同様のテキストを得ようとしています。 イベントビューワ上の"説明"欄に表示されるテキストが "Win32_NTEventLog.Message"の値とのことなのですが、一部の イベントでは .Message に"%n" (n:整数)という文字列が挿入され ており、これがイベントビューワ上では他の文字列に置き換えて 表示されます。 見つけた例: ソース:DCOM,イベントID:10005のイベントでは、.Message中 に"%109"と記述されていたが、イベントビューワで見るとこの部分 が"ファイルが見つかりません"と置換される 置換される文字列がどこにあるのか、WMIのリファレンスやObject- Browser等で探したのですが、見つけることができませんでした。 Windowsの標準的なエラーメッセージを保持しているクラスでもある のか思うのですが、どなたか、思い当たる事でもありましたらお教え 頂けないでしょうか。 よろしくお願いします。
FormatMessageでねーの?
エラーコードからFormatMessageでエラー文字列に変換する場合 エラー文字列の中には%1や%2というようにパラメータが必要なものがありますよね(例えばERROR_WRONG_DISK) こういうのっていちいちエラーコードを調べてパラメータを指定するもんなんですか?
APIでいいのかな 質問しちゃいます。 メモリにあるHTMLソース char html[]="<HTML><h1>test</h1></HTML>"; みたいな 物を、表示したいんですが 何を使えばよろしいのでしょうか? ActiveXのwebBrowser使ってみたけど ファイルに保存した状態じゃないと駄目みたいなのです。
582 :
デフォルトの名無しさん :04/02/05 02:10
質問です。 Google Deskbar みたいなアプリってどうやったら作れるのでしょうか?
IDeskBandを実装する。
WinXP用ネットワーク切り替えツールが作りたいのですが その辺のAPIってどれでしょう?
ネットワーク切り替えってなに?
ネットワークっていったらインターネットのことだろ インターネットっていったら2ちゃんねるとかあれのことだろ そーいうことだから
588 :
デフォルトの名無しさん :04/02/05 15:51
CRowset::SetDataについて質問があります。 現在、WinXP Pro + VS2003Pro + MSDE の環境と MFC + ATLサポートの形式でOLE DB接続コンシューマの データベースアプリを作っています。 そこで、レコードの更新・挿入時にSetDataを使用しているのですが 主キーを設定しているテーブルを更新しようとすると DB_E_ERRORSOCCURREDを返して更新ができません。 MSDN(日本語・英語両方)では、 書き込み禁止列がある場合、操作は失敗し、 これを回避するにはカーソル マップを変更します。 といった意味の記述がありますが具体的にどのような コーディングをすればいいのでしょうか?
589 :
デフォルトの名無しさん :04/02/05 16:30
すれ違い
590 :
デフォルトの名無しさん :04/02/05 18:11
APIでcryptと同じ関数あったら教えてください
ソース探してきて自分で組み込む
>> 577-578 ありがとうございました。 FormatMessageをVC++でから試したところ、イベントビューワと同じ メッセージが得られました。 ところで、今更申し上げるのは恐縮なのですが、実環境は以下のような 事情があります。 1.開発環境が買えないので、スクリプトで作成する (すくなくともVBSに、エラーコードからメッセージを引く関数は無い様子 → FormatMessageが使えない? JScriptの"Format"が使えるか試す予定) 2.ネットワーク経由で他のPCからイベントを収集し、且つターゲットのOSが 日本語版/英語版混在 (日本語版Winは日本語のメッセージしか保持していないらしく、LANGID を切り替えても英語のとメッセージは得られない模様。 → 接続先のOSから、メッセージの一覧を取得する必要あり?) というわけで、できればシステムメッセージを保持しているオブジェクト(?)を 特定し、接続先OSのそれを参照できないかなと考えています。 度々もうしわけないのですが、心当たりありましたらお教え頂けませんでしょう か...
>>592 うーん、、、KERNEL32.DLLにMessageTableリソースでエラーメッセージの一覧があるので、
あらかじめ取得しておくとか解析するとか。
bccなりで引数にエラーID取って標準出力なりにFormatMessageの結果を返す コマンドでも作ったほうが早そうだが。
ひょっとしたらガイシュツかもしれませんが、 絶対パス、相対パスからファイル名だけを抜き出すAPIはありますか? C:\\Program files\\test\\a.exe test\\a.exe .\a.exe a.exe のようなパスで、どれでもa.exeが返ってくるようなAPIが理想なのですが。 それぐらい自力で抜き出せと言われそうですが。 その場合、文字列末尾から\\までを抜き出せばいいのかな? 見つからなかったらそのまま返すという風に。
PathFindFileNameあたりか?
>>596 GetFullPathNameのlpFilePartでどうだろ
>>596 _splitpathってどう?
でも、APIとは言わないか。
APIだけどWin32APIではないね
現在マウスをフックしようと思ってプログラムを作っているのですが、 SetWindowsHookExに渡すWH_MOUSE_LLというフラグが使えなくて困ってます。 HDの中を検索した所winuser.hに書いてあるようなのですが、 インクルードしても「定義されていない識別子です。」とコンパイラに怒られます。 一応以下のようにしてインクルードしています。 #define _WIN32_WINNT 0x0400 #include<winuser.h> 開発環境はVC6 OS:Win2000です。
#define _WIN32_WINNT 0x0500
Win9x系でのキーフックについて質問なのですが、 システム全体でAlt+TabやCtrl+Escなどを禁止して、Ctrl+Alt+Delだけ 有効にする方法はないでしょうか? SystemParametersInfo(SPI_SCREENSAVERRUNNING, ...)を使えば Ctrl+Alt+Delまで使えなくなるし、かといってWH_KEYBOARD_LLは使えない。 WH_KEYBOARDでは、フックしても効果がないですし…。 やっぱり、無理なんでしょうか?
>>602 嘘はいかんよ、嘘は。
手元のwinuser.h見たら
#if (_WIN32_WINNT >= 0x0400)
で囲まれてるから、_WIN32_WINNTの定義はそれであってると思うよ。
気になるのは、
>>601 で示された定義の前にwindows.hとか、
中でwinuser.hをincludeしてるファイルをincludeしてない?
ってか、winuser.hを直接includeするよりはwindows.h一つで
済ませた方が良くないか?
605 :
デフォルトの名無しさん :04/02/06 16:49
C/C++スレから移動してきました。 開発環境Win2K,VB6.0&VC++6.0で、 内容としてはVBの要素も強いのですが教えてください。 VB6.0でPrinterオブジェクトを利用した出力処理があるのですが、 プリンタの設定でファイルに出力する場合にファイル名を入力するダイアログがでてきます。 このダイアログを出さないようにしたいのですがなにかよい方法はないでしょうか? (最初考えたのは、WinSpool の StartDocPrinter をフックして、 DOCINFOにファイル名を加えてやればできるかなと思ったのですが それより先に StartDocDlg というよくわからないAPIを呼んでいて ダイアログもそこででているようで行き詰ってしまいました・・・)
w2k+IME2kなのですが、 ワードパッドで日本語入力しているときに 入力文字の下の線が波線になっているのはどうやっているのでしょうか? 通常は点線なのですが・・・
UNIXでのシステムコールがWindowsでのW32APIに相当する物と考えていいんですか?
システムコール+Xのライブラリ、かな〜
609 :
デフォルトの名無しさん :04/02/06 17:51
SysListView32をCreateWindowExで作ってごにょごにょやってるんですが リスト内でマウスクリックが起きたときにどのアイテムがクリックされたかを 知るにはどうしたらいいでしょうか? LBItemFromPtかと思ったんですが動いてくれませんでした…
WM_NOFITYでNM_CLICKあたりが飛んでこない?
>>604 ありがとうございました。
指摘されたようにwinuser.hをインクルードする前に、
windows.hをインクルードしていました。
612 :
デフォルトの名無しさん :04/02/06 18:31
>>596 どうでもいいがデリミタは/も有効。自作する場合気をつけて
それはNTだけじゃないか? というか、一度フルパス>UNCに正規化した後に扱うのが Win32パスを扱う場合の定石っぽい
特定のファイルタイプに関連付けされたアイコンの取得方法って無いでしょうか? ファイルの実体が無くても、フォルダや各種タイプに応じたアイコンがほしいんですが・・・ レジストリをたどるしか無いかな
>>607 単に「UNIX」では範囲が広すぎて何とも言えない。
Windowsのシステムコールというとネイティブということになる。
通常はエグゼクティブに直接発行するのではなく、
Win32, POSIX, OS2 などのラッパーを通して使っている。
とてもあいまいな質問なのですが、何か思いついたことがあれば一言でもお願いいたします。 APIとはちょっと違うかもしれませんが、VC質問スレとか見当たらないもので…。 以前DLLを作成するときに、自作classは使わないほうが良いと知った覚えがあります。 本で読んだのか、人から聞いたのかはよく覚えていませんが、当時の私はDLLのソースの中で 自作classを宣言&使用するのをやめてDLLを作成しました。 最近またDLLを作ろうとしたところこれを思い出し、 「はて、DLLでは自作classが使えないのかな…」と試してみたら普通にコンパイル通りました。 DLL内で自作classを宣言&使用することに、何か不都合などありますでしょうか? どんなに細かいことでも良いのでよろしくお願いいたします。 ぐぐって調べようとしても、classもdllも一般的用語すぎてうまく絞れないもので煮詰まっております。
>>616 "DLL C++ クラス エクスポート"あたりをキーにすると少しは絞れるかも。
>>616 DLLの中だけで完全に閉じた世界でなら、無問題。
しかしDLLからクラスをエクスポートさせたいなら、
newとdeleteがアセンブラレベルで(C++の言語仕様レベルじゃないよ)
いったい何を引きおきしているのか、完璧に理解していなければならない。
>>610 NM_CLICKの代わりに-530が飛んできました(なんじゃこりゃ…)。
うまく行かないようなので別の方法で切り抜けようと思います。
ありがとうございました。即レス戴いたのに遅くなってすみませんm(_ _)m
ExtractAssociatedIcon APIがうまく動きません。
というか戻り値のアイコンハンドルが0になってしまいます。。。
ExtractIcon APIだとちゃんとアイコンハンドルを取得できるのですが。
下記にソースをうpしてみました。だれかおしえてー(>_<
ウインドウ上に2つのボタンが配置されてます。
ExtractIcon ボタンを押すと、explorerのアイコンを表示します。
(↑これは正常に動作します)
ExtractAssociatedIcon ボタンは、win.iniに関連付けされたEXEファイルのアイコンを表示します。
(↑こちらがダメです。。。)
http://www.pandora.nu/tv/src/img20040207004452.zip
SHGetFileInfoにしてみてはどうか
>以前DLLを作成するときに、自作classは使わないほうが良いと知った覚えがあります。 MFCの共有DLLを思いっきり否定してる人がいたわけか
つーかMFCの共有DLLは、VC++しか使わないし。 コンパイラ限定のDLLで好いなら、別にclassをdllから exportするのは自由だとおもうけど、MS自体COM作ってるわけでねぇ。
>ExtractAssociatedIcon 第2引数にリテラルを渡したらダメじゃないの?
httpのファイルを拾いたいんですが
簡単に出来ますか?
GetHttpFile("
http:// 〜");
見たいな感じで。
もうちょっとめんどくさくてもいいや。
>>626 URLDownloadToCacheFileとか?
>>608 ,615
ありがとうございます。そういえばw2kまではos2/posixサブシステムがありましたね。
ExtractAssociatedIconの引数って、なんかアレだよなw
630 :
デフォルトの名無しさん :04/02/07 04:24
こんにちは。 ファイル関連の扱いとして、 あるフォルダ内に、どのようなファイルがあるかを調べたいのですが、 適切なAPIがよくわかりません。 どのAPIを使うのか、軽く教えていただけるとありがたいのですが。 申し訳ありませんが、よろしくお願いいたします。
>>630 > あるフォルダ内に、どのようなファイルがあるかを調べたいのですが、
「どのような」の内容を具体的に書けよ。
ファイル名、サイズ、作成日付なんかだと API でそれなりにさくっと得られるけど、エッチな絵が含まれるファイルがあるか調べたいとか言われても困るしな。
>>617-619 ありがとうございました。昨日はあのまま寝てしまったので、これから色々調べてみます^^
>>624 お主、COMを持ち出した意図はどっちだ?
>633 どっちとは?すくなくとも、MSは、DLLでclassをexportするより、 新しくCOMを作ったという面があるわけで、つまり、DLLのexportは、 MSからしてもあまり推奨されていない、限定的な解でしかない、ってことでしょ。
COMみたいに抽象クラスを定義しておいて インスタンス生成関数をエクスポートした方が楽だよなぁ。
>>635 推奨とかそういうんじゃなくて、
C++は名前修飾に標準規格のようなものがないから、
他社製のさまざまなC++処理系でも平等に使えるようなAPIが
作れないからだと思うぞ。
>>622 SHGetFileInfoですか。そちらでも試してみます。
>>625 >>ExtractAssociatedIcon
>第2引数にリテラルを渡したらダメじゃないの?
むぅーよくわかりません。何を渡せばいいのでしょうか・・。
HICON ExtractAssociatedIcon(
HINSTANCE hInst, // アプリケーションインスタンスのハンドル
LPTSTR lpIconPath, // ファイル名
LPWORD lpiIcon // アイコンのインデックス番号
);
lpIconPath
1 つの文字列へのポインタを指定します。この文字列で、アイコンを
保持しているファイルのフルパスとファイル名を指定します。
と、MSDNには載っています。
でかい配列を作ってpathをコピー。そして、その配列を2番目の引数に入れる
>>640 ありがとうございます。動きました。
うわぁワケワカラン・・・。
char* lpExeFileFullPath = "C:\\WINDOWS\\win.ini";
↑これでは動かずに、
char lpExeFileFullPath[] = "C:\\WINDOWS\\win.ini";
↑これで動く。
この2つの違いって何なんですか???わからない〜〜
>>622 SHGetFileInfoも正常に動きました。
memory allocation
>>630 ワイルドカード使ってFindFirstFile、FindNextFile
>>641 俺もそう思う。ホントに変な動きだね。
char *lpExeFileFullPath = strdup("C:\\WINDOWS\\win.ini");
とすると動くし。ワケワカラン
strdupは領域確保するから。lpExeFileFullPathに確保した領域への参照をさせる
647 :
デフォルトの名無しさん :04/02/07 19:53
多分APIだと思うんですが。。。 エクスプローラのツール→フォルダオプションで表示される ダイアログをプログラムから表示する方法ってあるでしょうか。
>>646 要は、ExtractAssociatedIcon()は第2引数を書き換えるから
定数領域のメモリを渡しちゃダメって言うことでしょうかね?
(スレ違いすまん)
>>648 そのとおり。ヘルプ見ると第二引数は書き換えられることがあると
書いてあるね。バッファの大きさに気をつけないとバグるかも
嫌な仕様だなぁ。
本当なら文字リテラルを渡してもOKなはずですが、その領域は リンカによって書き込み不可になっているのです。 多分ExtractAssociatedIcon()を実行中、保護例外が発生してると思いますよ。
>>647 control.exe folder
(Windows 2000 or lator)
652 :
デフォルトの名無しさん :04/02/08 00:42
VB6なんですが DrawFrameControlやDrawEdgeでユーザーコントロールの外観を描いてますが WinXPの視覚スタイルが適用されないので困ってます。 Manifestファイルを使っても効果がありません。 "DrawFrameControl 視覚スタイル"とかで検索しても情報出てきません。 視覚スタイルを使って描画するにはどうしたらいいのでしょうか。
DrawThema〜 あたりを使うらしい。
Win32APIから外れるかもしれませんが、アプリのボトルネックを調べる為にターゲットアプリを 内部で実行し、Win32API呼び出しをフックして取得、それぞれのAPIが呼ばれた回数とそれらに かかった時間を調べるにはどのような方法を使えば良いのでしょうか? ターゲットアプリのソースコードは無い(つまり、gprofやVC++のプロファイラは使えない)状況でも 使えるようにしたいのですが・・・
レバーコントロールを作ろうとしているのですが、 生成されずに困っています。 生成部分は下記のとおりです(BCC5.5.1 + BCC Developer)。 INITCOMMONCONTROLSEX icc; icc.dwSize = sizeof(&icc); icc.dwICC = ICC_BAR_CLASSES | ICC_COOL_CLASSES; InitCommonControlsEx(&icc); hRebar = CreateWindowEx( WS_EX_TOOLWINDOW, REBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | RBS_BANDBORDERS | RBS_VARHEIGHT | CCS_NOPARENTALIGN, 0,0,100,100, hWnd, (HMENU)ID_REBAR, hInstance, NULL); ツールバー、ステータスバーは問題なく生成できています。 ご存知の方いらっしゃいましたら、ご教授お願いします。 (Delphiでは生成できたのですが、BCC側の問題なのでしょうか?)
656 :
デフォルトの名無しさん :04/02/08 14:20
こんにちは。
猫さんのHPに、こういう記載がされています。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_189.htm switch (lpnmTB->iItem) {
case IDM_MARU:
lstrcpy(szMenuName, "MARUMENU");
break;
case IDM_SHIKAKU:
lstrcpy(szMenuName, "SHIKAKUMENU");
break;
}
hMenu = LoadMenu(hInst, szMenuName);
hPopup = GetSubMenu(hMenu, 0);
rebarのドロップダウンメニューを持つツールバーなんですけども、
なぜか、リソースからメニューがロードされないです。
で、上記の部分を、hMenu = LoadMenu(hInst,MAKEINRESOURCE(MARUMENU));
に変えると、きちんと読み込まれます。
何が問題で、読み込まれないんでしょうかね。?
できれば、char型のストリングで指定したいんですけども。
お手数ですが、ご返答願いますでしょうか。
すいません、修正します。 MAKEINTRESOURCEでした。
>>655 icc.dwSize = sizeof(&icc);
これが悪いようだ。
>>656 LoadMenu(hInst,"MARUMENU");
と直接指定した場合は?
>>658 ありがとうございます。
初歩的なミスですが、ぜんぜん見えてませんでした。
すごく恥ずかしいです。
ごめん。本文よく呼んでなかった。 忘れてくれ。
>>652 DrawThem"e"ですよね?検索したらかろうじて3件引っかかりました。
members.jcom.home.ne.jp/1213687801/cs/windowsforms/theme.html
「WM_THEMECHANGEDメッセージを監視する必要があり」とか書いてあるので
VB6だと結構苦手っぽいですね。書けないことはないと思うのでやってみます。
WinsockAPIをフックしたいのですがどうすればいいでしょうか? メッセージフックでは出来なさそうですし、DLLを置き換えるくらいしかありませんか?
API関数の呼び出しをフックするにはどうすればいいでしょうか?
668 :
デフォルトの名無しさん :04/02/09 12:57
関数Aの引数として、関数Bの関数ポインタを渡す際、関数Bはグローバルでないと いけないのでしょうか。 関数Bがグローバルのときは通ってたコンパイルが、クラスのメンバ関数にすると とたんにエラーをはくようになります。
>>668 これはC++の質問ですな。staticでないメンバ関数へのポインタは普通にはとれない。
実体のないものはコンパイルとおらん なのでstaticで宣言するのが定石 但しstaticメンバ内にはスコープが通らないため 工夫が必要 続きはC++な質問の方へ
あんまり普通とは言えない気がするなあ
そのポインタをAPIに渡しても無駄
中途半端な知識のやつがスレ違いなC++の事語るスレはここです。
>>671 実体が無いって
メンバ関数も new の時に実体が作られるとか
思っちゃってるのだろうか。
メンバ関数のアドレスなんていつでも取れるでしょ。
エラーが出るのは static じゃないメンバ関数は
呼び出し規約が thiscall になってるからでしょ。
メンバー関数のポインタはclassを指定しないと使えないから virtualは関係ないわけだが
単に、関数ポインタの型が違っているから怒られると思うのだが...... class A { static int FuncStatic(); // int (A::*)(); int Func(); // int (*)(); };
逆やん… class A { static int FuncStatic(); // int (*)(); int Func(); // int (A::*)(); };
>>681-682 いやだからそれが thiscall と __cdecl や __stdcall の
呼び出し規約の違いだろ。
この話題ってFAQ&スレ違いだな。 なんか定期的にどっかで見かける。
透過色を使ったスプライト表示はどうやるんでしょうか? BitBltにはその機能はないですよね?
ウィンドウ内の話ならAlphaBlend/TransparentBlt(2000/XP)、 もしくは自力で抜き色からリージョン生成してデバイスコンテクストに選択してBitBlt。 or DIBSectionに自力で合成。 or DirectX。 ウィンドウそのものの形を変化させたいならSetWindowRgn/UpdateLayeredWindow(2000/XP)
ImageListもアリ
>>664 気付きませんでした。こんな便利なものがあるんですね
ありがとうございます
JavascriptのsetTimeoutのような関数はWIN32APIにはありますか? 引数に関数と時間をセットすると、その時間経ってから関数を実行してくれるやつです。
setTimeoutがどういう動きをするのか知らんが、 処理がそこで停止して、 指定時間後に関数を実行するのなら Sleepの後に関数呼べば済むだろ 処理がそのまま継続されるのなら、 スレッドつくることになるかな
SetTimer() はだめなんでつか。そうでつか。
timeSetEventもあるでよ。
694 :
デフォルトの名無しさん :04/02/10 14:25
プログラム上でWindows2000のシステムロケールの既定値を変更する方法を ご存知の方はいらっしゃいませんか? SetLocaleInfo Win32APIが変更できるのはユーザー上書き部分だけで、シス テムロケールの既定値は変更出来ないとの事なのですが、 [コントロールパネル]-[地域のオプション]-[既定値に設定]-[システムロケールの 選択]で変更が出来ると言うことは、なにか他の手がありそうなんですが、MSDN ライブラリを漁ってもそれらしき方法が見つかってない状況でして...
695 :
デフォルトの名無しさん :04/02/10 15:18
ファイルをクリックしたらそのファイルのファイル名を取得する方法はないのでしょうか? D&Dとか使えば簡単にファイル名を取得できるのですが、 ファイルをクリックしただけでファイル名を取得したいのです。 以前にも似たような質問させてもらって恐れ入りますが、 分かる方いらっしゃいましたらよろしくお願い致します。
>>695 どこのファイルだよ?エクスプローラーか?
>>695 Browser Helper Objectsで出来るかもしれん。
出来ないかもしれん。
>>695 www.microsoft.com/globaldev/handson/dev/muiapp.mspx
によれば "Changing the system locale requires a reboot"だそうだけど。
| Hit!! | | ぱくっ| /V\ /◎;;;,;,,,,ヽそんなエサで _ ム::::(,,゚Д゚)::| 俺様が釣られると思ってんのか!! ヽツ.(ノ:::::::::.:::::.:..|) ヾソ:::::::::::::::::.:ノ ` ー U'"U'
ごめん、、、誤爆した。
>>698 >www.microsoft.com/globaldev/handson/dev/muiapp.mspx
>によれば "Changing the system locale requires a reboot"だそうだけど
うん。[コントロールパネル]-(中略)-[システムロケールの選択]を行った場合も
再起動を要求されるので、その点は問題ないのだけど、自分の知りたいのは、
ユーザーさんにコントロールパネルを操作させずに、例えば、
[日本][中国][韓国]と言ったオプションボタンなりメニューなりを用意して、
ユーザーの選択に従ってWindows2000のシステムロケールを変更したいと思っ
てるんですわ。
うーん、レジストリかな。CPL内でゴニョゴニョ設定してそうに見えるけど。
>>702 >うーん、レジストリかな。CPL内でゴニョゴニョ設定してそうに見えるけど。
なるほど、起動時にレジストリを読んで設定してるかも知れないですね。
ちと調べてみます。
相手にしてくださった方どうもありがとうございました。 早速色々とやってみます。
MoveWindowAPIを使ってウィンドウのクライアント領域をドラッグしても ウィンドウを動かせるようにしているのですが 通常のウィンドウはタイトルバーを使ってドラッグすると 枠のみ表示された状態で移動するので 同じようにしたいのですがどうすればいいでしょうか?
MoveWindow やめて、WM_NCHITTEST で HTCAPTION 返す式にしてみては
意味わかんね
クライアントをクリックしても、タイトルバーをクリックしたってことにすんだろ。
例えがいいかどうかは別として、RealPlayerみたいに ドラッグ中にウィンドウそのものも移動させるってことでしょ?多分。
話が耕作している
>>706 サンプル見つけました。
まさにこれです。
わざわざマウスの座標とか計算してたのが
馬鹿みたいですね。
ア キ ラ メ ロ
つーか、16bpp/24bpp/32bppの相互変換ならともかく、256色以下への減色だと どう減色するかの問題だろ。
お尋ねします。 フォントをインストールせずに表示するのってどうやるんでしょうか? APIだけでできるのでしょうか?
フォントがらみのAPIであった気がする。 一覧に表示させないでインストールしたりとか。忘れた。
>>714 あーごめん、言葉足らなかった。
全部32bitに色数変更したいんよ。
さっきLPBITMAPINFOHEADER作って、biBitCountを32にして
GetDIBitsにLoadImageから返ってきたHBITMAPを突っ込んで
やってみただんけど失敗。GetLastErrorやったら何故か0が返ってきて
意味分からなくなったから止めた…。
質問です。 モニタの省電力設定時間で省電力モードに入ったあと(画面ブラックアウト後) 何かのイベントが発生した時に、省電力モードを解除して(画面表示復帰して) ユーザーに知らせたいのですが、うまく行きません。 PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1)で 一瞬モニタの電源が復帰するのですが、またすぐに電源が切れてしまいます。 自分自身のコードで PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2)を 実行してブラックアウトした後に PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1)を 実行するとうまく行くのですが システム側から省電力モードにされた後だとうまく行きません。 (常に省電力モードのメッセージが発行されている?) WM_MOUSEMOVEとか投げても復帰しません。 よろしくお願いします。
>>717 DIBSectionで32bppなDIB作ってそこにLoadImageで作成したHBITMAPを
BitBltすれば?
>>718 キーボードイベントやらマウスイベント送ってやったら?
>>720 上にも書いたのですが、WM_MOUSEMOVEではダメでした。
今度キーボードイベントで試してみます。
けどHWND_BROADCASTでキーボードイベントPostしたら
別に開いているアプリにキー入力されそう・・・
省電力を監視しているプロセスが見つかれば、そこにだけ送ればいいんでしょうけど・・・
(スクリーンセーバーを解除するのにはその手が使えますけどね。WM_CLOSE送って。)
マウスイベント→mouse_event
>>722 ぐはぁ、mouse_eventなんてAPIがあったのですね。
知らなかった〜。試してみます。
>>722 キーボードイベント→keybd_event
>>716 自己解決したような気がします。
AddFontResource ってやつでいいみたいです。
分かりにくい質問かと思いますが・・・タスクバーやWin9xのDOS窓のように、リサイズの際 一定量以上マウスを動かさないとリサイズ出来ないようにするにはどうすればよいのでしょうか。 APIで制限出来るのですか?
WM_WINDOWPOSCHANGINGで出来ると思うよ。
素早いレスありがとうございます。色々サンプルを探してやってみます。
729 :
デフォルトの名無しさん :04/02/11 16:31
システムに登録されているアイコン(フォルダや関連付けされたファイルなど)を 取得するためにはどうしたらよいでしょうか。キーワードとなる関数名だけでも 教えてもらえれば自分で調べますので、よろしくおねがいします。
ExtractAssociatedIconとかSHGetInfoとか
>>730 それって実体がないと失敗するから・・・
レジストリさらえ
システムイメージリスト。…自信ないな。 もうね、CodeGuru見てくればいいじゃない。
>>730-
>>733 みなさんどうもありがとうございました。
ひとつずつ調べてみます。
735 :
デフォルトの名無しさん :04/02/11 22:52
こんにちは。 FindFirstFileで、検索ハンドルを得たあと、 その後、次のファイルを調べますよね、FindNextFileで。 その際、なぜか初めに必ず「.」(ピリオド)がファイル名として出てくるんですが、 これって、仕様なんですかね? それとも、私のプログラム記述に何か問題でもあるのでしょうかね。 その点について、ご返答いただけたらうれしいです。 宜しくお願いします。 WIN32_FIND_DATA FindFileData; HANDLE hFind; hFind = FindFirstFile("D:\\*", &FindFileData); if(hFind == INVALID_HANDLE_VALUE) { MessageBox(hWnd,"ERROR","FINDFIRSTFILE",0); } for(sfi_index=0;sfi_index<256;sfi_index++) { FindNextFile(hFind,&FindFileData); if(ERROR_NO_MORE_FILES==GetLastError())break; strcpy(sfi[sfi_index],FindFileData.cFileName); } FindClose(hFind);
>>735 ピリオドは、そのディレクトリ自身をあらわすディレクトリ
ピリオド2つは親ディレクトリをあらわす
サブディレクトリには必ずこの2つがあるよ
>>736 あぁ、どうもです!
わかりました。
ご返答ありがとうです。
必ずではないよ NTFSでフォルダにドライブをマウントすると ピリオドひとつのエントリは存在しない
それはサブディレクトリではないね
でもルートディレクトリはドライブの直下にしかないと 思い込んでるとハマる
>>722 mouse_event(MOUSEEVENTF_MOVE, 0, 0, 0, 0);
で無事解決しました。
どうもありがとうございます。
742 :
デフォルトの名無しさん :04/02/12 22:56
スクリーンショットをとることのできる APIってありますか?
自分でデスクトップのDC拾ってきてBitBltすりゃいいじゃん
ごめん説明不足でした。 ウインドウの中じゃなくてデスクトップすべてなんだけど どうかな?
>>745 だから〜、GetDC(GetDesktopWindow()) で返ってきたhDCをBitBlt()してごらん
CreateDC("DISPLAY", 0, 0, 0)という手もアリかな。
できました〜。 どうも有り難うございました。
>>747 それを言うなら GetDC(NULL)
746と749では微妙に違いがあったような
マルチのときとかな
以前このスレで、 GetKeyState()が9x系で動かないと言いましたが、 また9x系でうまくいかない事がありました。 それは、Ellipse()です。 この関数を使って、ウインドウに楕円を描いています。 NT系でプログラムを実行すると、普通に楕円が描かれています。 ところが、9x系の場合、どうも描画が奇妙なのです。 どう奇妙かと言うと、 描画した円をまわりの部分が、 つまり円の左、右、上、下を囲む長方形部分が、 まるでファミコンがバグったように、砂嵐のように、塗りつぶされてしまうのです。 なにがいけないのでしょうか?
プログラムが悪い
NT系では普通に動くんですが……。 Win98の友達に指摘されたんです。MEでも同じ症状が出ました。 NT系では今のところ、どれでも普通に動いています。 で、不思議な事に、不具合がでるPCとそうでないPCがあるのです。 学校にもWin98とWin95があったので試してみたのですが、 まったく問題なく動きました。 XPしか持ってないから、問題を三軒できないんです
>>752 > で、不思議な事に、不具合がでるPCとそうでないPCがあるのです。
> 学校にもWin98とWin95があったので試してみたのですが、
> まったく問題なく動きました。
のに、たまたまNT系である自分の環境で動くと
> 9x系でうまくいかない
> 9x系の場合、
とか勝手に決め付ける頭の悪さ
互換モードでデバッグしたか?
758 :
デフォルトの名無しさん :04/02/13 21:32
API関連だと思うので質問させていただきます。 cgiにフォームに記入してボタンを押した時のように、データを渡したいんです。 GETのようにアドレス(/hoge.cgi?data=onigiri)でわたすのでなく、 POST形式でデータで渡したいのです。 MFCを使うと簡単らしいので使ってみました。 CInternetSession CHttpConnection CHttpFile 使うことがわかりました。 openRequest(CHttpConnection::HTTP_VERB_POST, SendRequest or Ex 使うこともわかりました。 (HTTP_VERB_GET形式でファイル取得も成功しました。) でも、POST時のその前後の WriteString等で渡すデータの渡し方の形式がわかりません。 どのような形式で渡せばいいのでしょうか? ご教授ください。
>>758 ぅぁぁ
純粋Cだ
ソースほしい。
めっさほしい。
どこにありますか?
もうないですか?
§,; ________§; ,
|| §; / § ヽ ||
|~~~§~ §'~~~~~~~| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ____§/"""ヽ,§_____ | < Winnyで流してください。
|__|///(§ §)ノ////|__|///\________
⊆___)///ゝ___§ノ/////(____⊇////
///////////////ジュ〜////////////
/////////////////////////////
winsockのソースチェックしたいな。
>>758 なんか、すごくまともなソースだな。
コーディング規約とかもきっちりしてそうだし。
>>763 でも何故pureCなんだ?
普通C++だろうに。
流石M$だな。
>pureC 違うだろ
もともと一部の大学や政府機関には開示してたんでしょ? そういうとこに所属してて、「見まくってますが何か?」って香具師はおらんの?
おりますが何か?
マイクロソフトのソースを見たけりゃ MFCのソースを見るがいいさ
cppも混ざってますね。
>>758 ウィンドウの矩形が画面の外だったら、ってのを
MonitorFromRect(&m_rcWindow, MONITOR_DEFAULTTONULL) == NULL
とスマートに書いてるね。参考になる。
いろいろ面倒なんでできるだけ流出コード貼らんでほしいんだが。
専用スレ立てようぜ。
テンプレ↓
Windows 2000/NT のソースコードがネット上に流出
http://www.faireal.net/ Neowinがつかんだのはショッキングで、ことによると破滅的なニュースだ。
ネット上にWin2000とWinNTのコードが流通しているというのだ。
現時点ではコード全体がリークしたのかどうか不明だが、コンパイルしてみれば分かるというものだ。
Microsoft からのコメントはまだない。公式には未確認である。
ソースは200MB少々のアーカイブで解凍したら600MBくらい。
全体がリークしたのではない可能性が高い。
ソース全体は約40GBだろうとCNET。つまり本当だとしても、ごく断片がリークしただけらしい。
ただし1GBの書庫も出回っており、本当にどのくらいリークしたのかは未詳。
これからどれくらい増えるか楽しみだな 全言語のページからWindows ソースコード 流出を検索しました。 約1,920件中1 - 100件目 ・検索にかかった時間0.33秒
ソースって、M$社員になったらみんな見れるのかね。
779 :
デフォルトの名無しさん :04/02/14 00:03
Win2000やXPでLANケーブルを外したり接続するとタスクトレイに 吹き出しが出るようになってるんだけど、その時のイベントって 何のイベントが発生してるか教えてくり。
監視してるだけじゃないの?
WM_USER+3147 ってのが通知メッセージかね? Spy++でモサモサと飛んでるの見えるけど。
ゴメン。勘違いだった。寝ようかな…。
WM_DEVICECHANGEは使えんかな?
LANケーブルはずすと、イベントビューワに表示されるから その辺のAPIで何とかなるのでは?
しょうもない質問かもしれませんが聞いてください。 ウィンドウプロシージャをクラスに内包しようとしてたとえば下記のようなものを作りました。 class Window { Create(); static LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM); } CreateのときにWNDCLASSEX構造体のcbWndExtraにsizeof(Window*)、CreateWindow の最終パラメータにthisを渡し、WndProc関数内で Window* pWindow = (Window*)GetWindowLong(hWnd, 0); if (pWindow == NULL) { if (msg == WM_CREATE) { pWindow = (Window*)((LPCREATESTRUCT)lParam->lpCreateParams); SetWindowLong(hWnd, 0, (LONG)pWindow); } else { return DefWindowProc(省略); } pWindow->WindowProc(省略); } WM_CREATE直後にプログラムが応答しなくなります。 SetWindowLongの失敗を疑ってSetLastError(0)してからGetLastErrorでチェックしてみたの ですが一応正常に処理できているようです。 どこか直すべき点がありますでしょうか?
RegisterClassで拡張ウインドウメモリは確保してるのか? これでもいけると思う。 Window* pWindow = (Window*)GetWindowLong(hWnd, GWL_USERDATA); if( !pWindow ) { pWindow = (Window*)lpcs->lpCreateParams; ::SetWindowLong( hWnd, GWL_USERDATA, (LONG)pWindow ); }
>>786 WNDCLASSEX wcex;
wcex.cbWndExtra = sizeof(Window*);
の指定をしてRegisterClassEx(&wcex)してあります。
GWL_USERDATAを指定してみてもだめでした…。
if (msg == WM_CREATE) をはずすとAccessViolationが発生してしまいます。
(これは当然のような気がします)
うーん、クラス化はあきらめてゴリゴリ書くしかない…か。
WndProc全体が書いてないからもう何とも言えん。 ブレークポイント仕掛けて追うのがいいと思うよ。
>>785 if文がどういう繋がりか見づらいね...
自分は下記のようにしているよ。
if (WM_NCCREATE==uMsg) {
LPCREATESTRUCT pcs = (LPCREATESTRUCT)lp;
CWnd* Wnd = (CWnd*)pcs->lpCreateParams;
::SetWindowLong(hWnd,GWL_USERDATA,(LONG)Wnd);
Wnd->hWnd = hWnd;
}
CWnd* Wnd = (CWnd*)::GetWindowLong(hWnd,GWL_USERDATA);
if (NULL==Wnd) {
return ::DefWindowProc(hWnd,uMsg,wp,lp);
} else {
return Wnd->DispatchEvent(hWnd,uMsg,wp,lp);//WindowProc(関数名が違うだけ)
}
うわぁ。 半角スペースが意味ないようなので全角スペースで字下げ。 if (WM_NCCREATE==uMsg) { LPCREATESTRUCT pcs = (LPCREATESTRUCT)lp; CWnd* Wnd = (CWnd*)pcs->lpCreateParams; ::SetWindowLong(hWnd,GWL_USERDATA,(LONG)Wnd); Wnd->hWnd = hWnd; } CWnd* Wnd = (CWnd*)::GetWindowLong(hWnd,GWL_USERDATA); if (NULL==Wnd) { return ::DefWindowProc(hWnd,uMsg,wp,lp); } else { return Wnd->DispatchEvent(hWnd,uMsg,wp,lp);//WindowProc(関数名が違うだけ) }
>>785 こらこら、気は確かか?(w
もまいはmsg==WM_CREATEのときにpWindow->WindowProc(省略)を実行しているわけだが
俺はこんな感じにしてるけど、問題なくいけてる。 LRESULT CALLBACK base_Window::initWindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { if (uMsg == WM_CREATE) { base_Window *this_ = (base_Window *)((LPCREATESTRUCT)lParam)->lpCreateParams; ::SetWindowLong(hwnd,0,(long)this_); ::SetWindowLong(hwnd,GWL_WNDPROC,(long)staticWindowProc); return this_->WindowProc(hwnd,uMsg,wParam,lParam); } return ::DefWindowProc(hwnd,uMsg,wParam,lParam); } ところで>785 >WM_CREATE直後 って具体的にどこやねん。 そこを教えて貰わんと判らんのとちゃうんか?
>>785 >>788 も言ってるけど、WndProc全体を書いたほうがいいと思うよ。
あれだけから判断すると、pWindow==NULLの時しか処理してない気がするんだけど。
沢山のレスありがとうございます。 WndProc全体はこんな感じになります。 LRESULT CALLBACK Window::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { Window *pWindow = (Window*)GetWindowLong(hWnd, GWL_USERDATA); if (pWindow == NULL) { if (uMsg == WM_CREATE) { pWindow = (Window*)(((LPCREATESTRUCT)lParam)->lpCreateParams); SetLastError(0); if (SetWindowLong(hWnd, GWL_USERDATA, (LONG)pWindow) == 0) { ReportError(hWnd, GetLastError()); } } else { return DefWindowProc(hWnd, uMsg, wParam, lParam); } } return pWindow->WindowProc(hWnd, uMsg, wParam, lParam); }
WM_CREATE直後というのは、GetWindowLongの手前に簡単なメッセージボックス を出させるようにしていたのですがpWindow->WindowProcでWM_CREATEを実行 した後応答なしになってしまいます。 うーん、デバッガいりますね…探してきます。
>>797 いや、使ってないんですよ。
Digital Mars C++にPlatformSDKつっこんで使ってるんで…。
>796 だから >pWindow->WindowProcでWM_CREATEを実行 の部分をを晒せと。
>>799 Window::WindowProc()側に問題があるのでは?ということですか。
たしかにuMsg==WM_CREATEが成立した場合、呼び出しますね。
>>799 ごめんなさい、そっちを疑っていませんでした…。
WM_CREATEでTimerIDを作る部分で無限ループに陥っているんだと思います。
大変申し訳ありませんでした。
case WM_CREATE:
SetWindowRgn(hWnd, NULL, TRUE);
AnimateWindow(hWnd, 1000, AW_SLIDE | AW_VER_NEGATIVE);
while (SetTimer(hWnd, m_nTimerID, 15000, NULL)) { //ここから3行が問題
m_nTimerID++;
}
break;
ということでこの3行を削ることで解決しました。
問題が変わってしまいましたが、正しくはm_nTimerIDが初期化されているとして
while (!SetTimer(hWnd, m_nTimerID, 15000, NULL)) {
m_nTimerID++;
}
こうですよね?(SetTimerは失敗すると0を返す)
くだらない質問に長々とつきあって頂いてありがとうございました。
もっと精進してきます。
>783 ん〜WM_DEVICECHANGEやったけど、呼んでくれんかった。。はふー。
IP HELPER APIでLANが外されてるか接続されてるかは取得できる事は わかったのだが、出来ればイベントで拾いたいな。 監視するのはアホらしいし。
ファイルのハードリンクを作りたいんですけど、どうすればいいのですか?
('A`)ノ 今日知った事〜 アップダウンコントロールに WS_CLIPSIBLINGS をつけて 任意のエディットコントロールを buddy としてセットすると エディットコントロールの右辺のラインがうまく隠れなくて ちょっと不恰好に表示される。 ワタスの貴重な2時間が消えて行った…… ('A`;)ノ
>>805 NTFSならくりえーとはーどりんく
FATならセクタを直接書き換えてクロスリンクさせる → chkdskでギルティ
>>752 NT系では普通に動く。
9x系だと動作が変。(周りが砂嵐)
互換モードで試したが、問題が再現しない。
>>752 ビットマップは作成してから初期化するまで各ピクセルは不定値という仕様になっている。
9x系の挙動が典型的、NT系の挙動は不定値がある事情により0=黒なだけ。
じゃあやっぱりなんでもかんでも9xのせいと決め付けるアホのせいで
>>753 が正しいということね
>>809 「ある事情」ってのがすごく気になる。
セキュリティとか?(他プロセスが使ってたデータが残ってたりとか)
あーーー駄目だ。マジでもうわかんねー。誰かおせーてくれや。
監視すれ CD-ROMドライブのトレイの開け閉めは、ドライブ側から通知してくれているものだと 思ったけど、調べたらOS側からSCSIコマンドを一定期間で送ってドライブの状態を 得ているだけだった。
815 :
デフォルトの名無しさん :04/02/17 11:32
IEに貼り付けるムービープレイヤのActiveX作ってるのですが、 IE側でスクロールするとちらついてしまうので その間は描画を止めたいと思っています。 IEのスクロールを検知するにはどうしたらよいのでしょうか。 システムフックするしかないのでしょうか?
WinMainのlpCmdLineのコマンドライン引数をCommandLineToArgvWで argv形式に変換した場合 lpCmdLine (NULL)c:\document and settings\(いろいろ...) argv[0] c:\document(NULL) argv[1] and(NULL) argv[2] settings\(いろいろ...) みたいな感じで分けられてしまいます lpCmdLine++; wcscpy(my_path,lpCmdLine);ってやると大体出せます だけどなぜかコマンドプロンプトで引数付きで呼び出すと自分のパスが取り出せません WinMainとは違ってなんかややこしいです どうしたら正確な自分のパス名を引き出せますか?
GetModuleFileNameは?
819 :
デフォルトの名無しさん :04/02/17 13:35
820 :
デフォルトの名無しさん :04/02/17 16:40
他のアプリケーションのボタンのキャプション変えたり、フォント変えたりするのは SendMessageでいける?
822 :
デフォルトの名無しさん :04/02/17 17:06
ボタンのキャプションは変えられるが、フォントの変え方が分からん。
俺様のアプリのフォントを勝手に変えるなヴォケ
824 :
デフォルトの名無しさん :04/02/17 17:37
てめえの糞ソフトのフォントなんか変えるに値しないな
テメェの糞キャプションを補正してやってんだ。有難いと思え>823
827 :
デフォルトの名無しさん :04/02/17 17:46
変更されないように細工?バカじゃねーか?
まずは、外部からフォントを変更することにより発生する問題などを把握しような。
MS Sans Serifきめうちな海外ソフトでバイナリhack無しに日本語を表示させる手段としては 外部からの書き換えもいいと思うよ
830 :
デフォルトの名無しさん :04/02/17 18:19
で、どうすればいいのですか?
メッセージでフォントを切り替えるプログラムもそうそう無いだろう で、どんなメッセージ送ったんだ?
実は
>>829 で書いたような小細工ツールが欲しいなと思っただけだったり
833 :
デフォルトの名無しさん :04/02/17 18:36
一応WM_SETFONTを送ってみました
SendFontでも使えよ。
>>833 DialogでかつStockObjectならいけるかもな
836 :
デフォルトの名無しさん :04/02/17 18:55
>>834 >>835 ありがとうございました。SendFontの作者の方にメールを送って
変え方を聞きました。
作者タン、ご苦労様…
教えてもらえたんだろうか・・・ 詳細キボン
>>816 いやレスポイントされても。
誰も答えないってことは
結局そんなことできねーっていうことですかね。
日本語WIndowsには欧文フォントが指定されていても、 日本語を正しく表示する機能があるんだが、 あまり知られていないようだな。
質問です。 AVISaveOptionsの圧縮ダイアログでコーデックをWMV9VCMにして、 色々圧縮設定いじったあとにAVISaveVで圧縮保存したとき、 全フレームがキーフレームになったファイルができてしまいます。 WMV9VCM以外のコーデックを選んだときはちゃんと設定した値で 圧縮してくれます。 WMV9VCMってAVISaveOptionsで設定できないのでしょうか? どなたかご教授ください。 環境:Win2k Pro, VB6sp5
あ、VBはこっちじゃ聞いちゃダメみたいですね。 板汚しすいませんでしたl。
>>832 Emigrant32
>>839 いやコピペされても。
誰も答えないってことは
コピペに異議ありっていうことですかね。
844 :
デフォルトの名無しさん :04/02/18 02:00
市松模様を表示するプログラムを教えてください。 8×8マスのものです。
Win32APIで市松模様?
#define CR _T("\r\n") #define T _T("■□■□■□■□") CR _T("□■□■□■□■") DrawText(dc, T CR T CR T CR T, -1, &rect, DT_LEFT);
質問です。こういう方法じゃ無理なのでしょうか・・・ [目的]F1でヘルプが表示される動作を殺したい(他プロセスのウィンドウ) [やったこと]SetWindowsHookExでWH_KEYBOARDのグローバルフックをかけ、 そのプロシージャでF1のキーコードのメッセージを破棄するDLLを作成した。 [結果]世界はなにもかわらなかった。
>>847 F1キーのメッセージ自体は取れてるの?
WM_HELPを破棄した方がいいんじゃない?
>>847 もしかしたら、WH_KEYBOARD_LLの方じゃないとダメとか。
そうなると、Win9x系では使えませんが…。
答えられないと思ってるんならここで聞くなよw
遅レスすみません
>>848-850 F1キーのメッセージ自体はとれてました。
WH_KWYBOARD_LLではできるようです。
ただ、できればWin9xでも動くようにしておきたいんですよね・・・
WM_HELPとは、ウィンドウに送られてくるメッセージでしょうか。
WH_CALLWNDPROCではメッセージの破棄ができないようなのですが、
もしかして私は馬鹿なこと言ってます?
クラス化したダイアログボックス上のコンボボックスについての質問です(SDKのみ)。 ボタンおよびエディット部分をクリックしても、 コンボボックスのすぐ下に黒い横線が表示されるだけで、 リスト一覧が表示されずに悩んでいます。 (フォーカスがあたっている状態で、マウスホイールを上下に動かすと、 エディット部分の表示は設定してあるリスト通りに変わります) こういう場合、各CBN_xxxxメッセージを拾って処理しないといけないのでしょうか? (CBN_DROPDOWNを拾ってCB_SHOWDROPDOWNを送るとcpu100%になりましたが...)
>>854 クラス化ってサブクラス化のことか?
だとすれば、いらんことをやっている可能性大。
>>854 コンボボックスのサイズが小さすぎ。
ダイアログリソースでもっと高さを高くするか、
MoveWindow で高さを増やしてください。
・・・コンボボックスの場合 Window の高さで「ドロップダウンしたときの
リスト込みの大きさ」を指定するわけですが。
>>856 ありがとうございます。
今まで「ダイアログボックス」の高さを変更していました(^^;
>>847 ヘルプファイルをダミーに入れ替える、のはダメかな…
>>853 WH_CALLWNDPROCじゃなくてWH_GETMESSAGEではダメですか?
たしか↑はメッセージの通知を受けるだけだったはず
860 :
デフォルトの名無しさん :04/02/18 21:07
>>846 「: error C2065: 'rect' : 定義されていない識別子です。」ってなります。
rect はどのように定義すればいいのですか?
dc のところは hdc に直しました。
#define はどこで定義すればいいのですか?
あと黒いマスを緑色にしたいです。
これらは WM_PAINT の中に書けばいいんですよね?
RECT rect;
おっとあれが進行してるとは思わなかったぜ・・・
863 :
デフォルトの名無しさん :04/02/19 01:44
プロセスが自動で仮想メモリを確保してるっぽいんですが、 これが未使用だったら解放するのを強制するAPIってありますか?
>>863 自分のプログラムで確保したメモリを、外部から勝手に解放されたらどうなると思う?
>864 具体的にはCView内である操作をすると勝手に仮想メモリを確保してしまい、 CViewが破棄されてもそれが解放されなくて困ってます
866 :
デフォルトの名無しさん :04/02/19 03:31
>>863 兄が自分の夕食を作っていました。
そこへ、君がやってきて兄がちょっと目を離した隙に食べちゃいました。
どうなりますか?
ていうか、ここW32APIスレだよな?
>>866 お兄ちゃんは
「何で妹じゃないんだ…」
と、日々溜め込んできた辛い思いが一気に爆発し、うなだれる事でしょう。
870 :
デフォルトの名無しさん :04/02/19 10:14
Excel VBA で使います Date and Time Picker Control でドロップダウンリストを自動で表示させたいんだけど CB_SHOWDROPDOWN みたいな方法があれば教えてください 今は暫定策としてフォーカス移して Alt + ↓キーを送ってます
871 :
デフォルトの名無しさん :04/02/19 13:33
最近APIと関係ない質問が多いな
872 :
デフォルトの名無しさん :04/02/19 13:43
PSAPIってピサピーって呼びますか?
ピーサピ
874 :
デフォルトの名無しさん :04/02/19 14:25
複数のリソースファイル(*.rc)を使っているのですが なんでもいいのでファイルを変更してビルドすると obj : fatal error LNK1000: Internal error during Pass2 とかでてきます。 もう一度ビルドするとエラーがなくなります。 どっかバッティングしてるのでしょうか? 複数の*.rcファイルを使うときに注意することって何があるのでしょうか? ちなみにrcファイルは一度作ったものをコピーしてテキストエディタで開いて Resource.hのところを変更して使っています。(変更箇所はファイルごとに2箇所ぐらいです) ちなみにResource.hも複数あります。 もちろんファイル名はResource0.h Resource1.h Resource2.hとかなっています。 リソースファイルを複数使ってる方おりましたらアドバイスよろしくおねがいします。
APIのエロい人に質問です。 「英数」キーが離されたことを検出する方法があれば教えてください。 メッセージで検出しようとしても、WM_KEYDOWN なら送られてくるんですが、 「ひらがな」「カタカナ」キーを押さない限り、WM_KEYUP が送られてこないんですよ。
DirectInputのサンプルで「英数」キーの動きを見れば、 まあ大概、無理だと判るだろう。特に日本語キーボードは、 Shift+英数がCapsLockなのでこのあたりの対処が惨い。 だからどうにかするなら、ドライバレベルまで降りてくるより他にない。
>>876 なるほど。やはりAPIレベルでは無理でしたか…。
丁寧な解説をどうもありがとうございました!
なぜMSGをプロシジャーにおくることをdispatchというのですか?
送るから
市松模様のことですが、 int n=8,x=100,y=100,a=40; // nは8マス,xとyは座標,aは中に置くコマの大きさ int xx=140; // xxは座標 int m=1; // mは1マスと言う意味 // 四角形1マスの色(白) Hdr = CreateSolidBrush(RGB (255,255,225)); HdrOld = SelectObject(hdc,Hdr ); // 四角形1マスを描く1 Rectangle(hdc,x,y,x+a*m,y+a*m); SelectObject(hdc,HdrOld); DeleteObject(Hdr); //四角形1マスの色(緑) Hdr = CreateSolidBrush(RGB (0,155,0)); HdrOld = SelectObject(hdc,Hdr ); //四角形1ますを描く2 Rectangle(hdc,xx,y,xx+a*m,y+a*m); SelectObject(hdc,HdrOld); DeleteObject(Hdr); これだとxが100yが100の所に白と、xが140yが140の所に緑が1つずつしか書けない のですが、これに何か付け加えて8マス×8マスの市松模様を作れませんか? これを繰り返せばいいのかと思っているのですが、どのようにすればいいのか よく分かりません。お分かりになる方教えていただけないでしょうか? (もちろんAPIです)
>>881 Cの勉強をしましょう。APIとは特に関係のない部分ですね。
API的にやるなら市松のビットマップつくって、それをブラシに設定。 一気に塗りつぶせばいいじゃない。
FreeUserPhysicalPagesみたいなAPIをご存知の方がいれば、と思い 質問したのですが、どうもCViewを出してしまったせいで MFCと勘違いされてしまった方がいるみたいですね(汗
>>884 >CView内である操作をすると勝手に
ここが重要なんじゃねーかよ
>>884 SetProcessWorkingSetSize( hProcess, -1, -1) で何かが起こるかも?
でも、仮想メモリの使用量は変わらないか。
外部のプロセスのトップレベルウィンドウのハンドルを 取得している状態で、 なんらかのメッセージを送って、 モーダルダイアログがとじれられている状態にしたいのですが (ESCを押したような) どうしたらよいでしょうか?
そこから目的のウィンドウハンドルを取得して、メッセージを送る。
モーダルダイアログのハンドルを手に入れるにはどうしたらよいでしょうか?
(´-`).。oO("登録しる!"Dialogをオートで閉じる奴でも作るのかな…)
SetWindowsHookEx( WH_CBT )
ある瞬間だけなので、フックを作るのは今回は適当でないかもしれません。 トップレベルウィンドウを列挙して、オーナーウィンドウを調べるのがよいかと思いました。 どうもありがとうございました。
子ウィンドウならEnumChildWindowsとか
WinNT系でAdministrator権限の必要な機能を一般ユーザー権限で使うには サービスとして稼動させる以外の方法は無いのでしょうか?W32APIから多少 外れるようにも思いますが、よろしくお願いします。
>>894 本当にどうしてもアプリケーションが必要とするなら
Administrator権限で起動しる! とReadMeに書く手もあるが。
出来たらまずいだろう・・・
今ならスイッチする方法なかったっけ Administratorのパスワード要求されるけど
「別のユーザーとして実行」できるな。
それは結局Runasがサービスとして動いてるわけだが
900 :
デフォルトの名無しさん :04/02/20 14:26
>>894 ユーザー名パスワードがわかればLogonUser,ImpersonateLoggedonUserあたり?
プリンタのDPIを設定したディスプレイメモリDCを取得したいのですが、 メモリDCのDPIを変更するにはどうしたらいいんでしょうか? mhdc = CreateCompatibleDC(printerhdc); この普通にプリンタのDCから作る方法を使えないため、 dpi = GetDeviceCaps(printerhdc,LOGPIXELSX) mhdc = CreateCompatibleDC(NULL); としましたが、この後の設定に悩んでいます。 ご教授お願いいたします。
用紙サイズでメモリDCを作ればいいだろう。 用紙サイズが分からずディスプレイと同じサイズにしたいのなら ディスプレイ(96dpi)とプリンタのdpi比を掛ければいい
一応ディスプレイの解像度(dpi)は変更可能だから決め打ちすんなよ。 ……ってもあれ96dpi以外にするとそこらじゅうで描画破綻するけどな。
質問させていただきます。 Windowのタイトルバーの文字列を指定してボタンを押すと、そのWindowをSW_HIDE状態に隠すツールを作っています。 SHOWボタンを押すとそのツールがHIDEさせたWindowが復帰します。 このツール、すでにSW_HIDEなWindowは除外したいのです。 HIDEさせたWindowのhWndをリストとしてもち、SHOWボタンを押したときそれらをSW_SHOWするので 別の理由でHIDEしていたWindowまでSHOWしてしまうからです。 GetWindowPlacementで WINDOWPLACEMENTにWindow状態をとり、 lpwndpl.showCmdを調べてみたのですが、SW_HIDEしているWindowなのに SW_HIDEではなく、 SW_SHOWMINIMIZED (最小化してからSW_HIDEされてる場合)や SW_SHOWNORMAL (通常状態でSW_HIDEされてる場合)が格納されています。 何故SW_HIDEではなく、他のSW_が入っているのでしょう。 どうすればSW_HIDEしているかを取得できますでしょうか。 分かる方ご教授よろしくお願いいたします。
>>904 >別の理由でHIDEしていたWindowまでSHOWしてしまうからです。
自分でHideさせたWindowHandleをリストとして保持してるのに、
なんで?
906 :
デフォルトの名無しさん :04/02/20 23:54
Mutexオブジェクトの一覧を得る方法ってありますか?
>>905 HIDEさせる時にリストとして保存し、SHOWするときはリストを参照してSHOWするのです。
ですが今のままだと、他のツール(自分のにしろ、他の隠す系のツールにしろ)
「これ」以外のツールによってHIDEされているWindowまでリストにいれてしまいます。
このツールの動作を
「タイトルが指定されているのに一致しており、現在HIDEでないWindowをHIDEさせ、
任意でそれらを再びSHOWできる」
にしたいのです。
今だと
「タイトルが指定されているのに一致しているWindowをHIDEさせ、任意に任意でそれらをSHOWできる」
となってしまい、最初からHIDEしていたWindowまで白日の下に晒してしまうのです。
分かりづらくて申し訳ないです。
908 :
デフォルトの名無しさん :04/02/21 00:16
>>907 >「これ」以外のツールによってHIDEされているWindowまでリストにいれてしまいます。
原因わかってるじゃねーか。
じゃ、そこを直せばいい。
ええ、なので対象のWindowがSW_HIDEしているか
GetWindowPlacementで調べようとしたのですが・・・
>>904 の7行目以降な感じになってしまうのです。
>>910 あー、忘れてた!
ありがとうございました。
計画どおりの動作をするようになりましたヽ(*´ー`)ノ
>>902 >用紙サイズでメモリDCを作ればいいだろう
ディスプレイDCでも用紙サイズ設定は出来るのですか?
ResetDCで試しましたがダメでした。
どのAPIで設定すれば良いのでしょうか?
>>912 用紙サイズは縦横何インチ?
DPIは1インチ中に含まれるドット数なんだから、
用紙のサイズ*DPIでもとまるでしょ
>>913 用紙はA4です。
プリンタDPIが600DPIで、5040,7128です。
これをどのようにしてディスプレイDCに設定するのかがわからないのです。
ああ、ウインドウDCのスケールを調整したいという話か。 CreateCompatibleDCなんて持ち出すから、メモリDCの話かと思ったよ。 それならば求めるサイズのメモリDCに描画した後、 ウインドウDC(クライアントDC)にStretchBltをするか SetMapModeのMM_ANISOTROPICを指定するか、 好きなほうを選んでくれ。
>>915 ディスプレイメモリDCです。
プリンタのDPIを設定したディスプレイメモリDCが必要です。
つまり、96DPIのディスプレイメモリDCを600DPIにしたいのです。
>用紙サイズでメモリDCを作ればいいだろう。
ということでしたので、
ディスプレイDCにDPIを設定した後に、CreateCompatibleDCすると思ったのですが。
HDCに図形や文字を描画するActiveXエンジンがありまして、
ディスプレイメモリDCには正常に描画できるのですが、
プリンタメモリDCには正常に描画できないのです。
そのため印刷するには、一度ディスプレイメモリDCに描画した後に、
プリンタDCにStretchDIBitsしているのですが、
ディスプレイメモリDCから作成した互換BITMAPをプリンタのサイズにして描画すると、
図形は正常ですが、文字が非常に小さくなってしまうので、
描画前にDPIをプリンタと同じに出来ればと考えたのです。
非常に分かりにくくて申し訳ないです。
もしかすると、、、 CreateCompatibleBitmapで該当サイズのビットマップを作って、 SelectObjectでメモリDCに設定する。 といったことが知りたかっただけ?
>>900 そのAPI自体にAdminどころかLocalSystem権限が必要
CreateProcessWithLogonWはRunasサービスが必要だし
>>917 >CreateCompatibleBitmapで該当サイズのビットマップを作って、
>SelectObjectでメモリDCに設定する。
916で書いてますように、描画は出来ています。
しかし、BITMAPのサイズを変更しても、
ディスプレイメモリDCのDPIは96のままで600にならず、
正常な文字の描画が出来ないため、
メモリDCのDPIのみを変更する方法が知りたいのです。
SetMapMode で MM_TWIPS じゃ駄目すか?
>>920 SetMapModeでもいろいろ試したんですが、
全体的に拡大縮小はできるのですが、DPIは変更できませんでした。
無理なんでしょうか。
描画前にFontのポイントサイズを変更するしかないのかな‥‥。
>907 何か勝手に解決したみたいだが、何で >「これ」以外のツールによってHIDEされているWindowまでリストにいれてしまいます。 こうなるのか俺にはさっぱり理解できない。 ShowWindow(HIDE)したHWNDを放り込むだけの処理に、 どうしたら他のHWNDを持ってこれるんだ?
923 :
デフォルトの名無しさん :04/02/21 11:09
こんにちは。 あの、WIN32APIを用いて、 自作アプリケーションから、ある他のアプリケーションへ、メッセージ(Message)を送付する プログラムを作りたいのですが、実現は可能でしょうか? 例えば、自作アプリケーション内に、あるボタン(Control)があるとして、 そのボタンを押すと、ある特定のメモ帳.exeにテキストが入力されるみたいな。 メモ帳は通常、キーボードからテキストが入力されますが、 そのテキスト入力を、自作アプリケーション側から、したいのです。 それを実現するには、WIN32APIだと、 どのような関数を使用するのでしょうか?
FindWindow、SendMessage
>921 fontで直接指定するのはpixelだった記憶があるが。 ちゃんとDPI指定して変換掛けてるか?
>>920 それじゃ好みのdpiに設定できない
MM_ANISOTROPICを指定してSetWindowExtExとSetViewportExtEx で設定することになる
算数ができれば指定数値は割り出せるはずだから
GETDCを使う意味がわかりません
>>927 誰に聞いてるの?どのレスに対するレス?
すいません、「教えてください」最後の文に書き加えるのを忘れました 」教えてくださいとい」うことでよろしくお願いします
そういう場合は放置しとけ。
931 :
デフォルトの名無しさん :04/02/21 22:02
アプリケーション実行中に Alt キーを押すと、OS が勝手に プロセスの実行の権利を奪ってしまいますよね。 それを捕らえるためには WM_EXTERMENULOOP とかで良いと思うのですが、 他にも MessageBox とかを使用した場合も同じ事が起こります。 とりあえず、これらのように OS が実行権を奪う前にそれを知る 確実な手段は無いでしょうか? もし無いのならば、上記2点だけに気を付けてコーディングすれば 良いのでしょうか?
起動中のアプリケーションのリストを作る場合ですが、 スナップショットAPIでは、実行ファイル名だけは取得できるのですが、 そのファイルのフルパスを取得する方法はないんですかねえ。
934 :
デフォルトの名無しさん :04/02/21 22:42
>>933 EnumProcessで列挙してプロセスからフルパス取得
>>934 ,935
サンクス。スナップショットにIDがあるので、GetModuleFileNameEx()で行ってみます。
解決できそうです。ありがと。
>>931 何をしようとしているのかによるが、一般論では思想的に間違っている。
PCの制御をハイジャックすることはユーザにとって脅威でしかない独善だ。
例えばマイクロ秒単位でタイミング保証の必要があるならアプリではなくハード+ドライバ。
確認なんですが、CreateDIBSectionでnewしたメモリはdeleteしなくてもいいんですよね?
939 :
デフォルトの名無しさん :04/02/22 00:03
>>937 いいえ。ハイジャックをするのでは無く、「知ること」ができればよいのです。
例として、Windows のアプリケーションで小さなロボットを動かすことを考えます。
アプリケーションがロボットに何も命令しなければ、ロボットは常に前進し続るように
設計されていますが、アプリケーションは3秒ごとにロボットに右へ曲がるように
命令することによって、ロボットは一定区域内で旋回し続けるようになっているとします。
しかし、Alt キーを押されると、3秒ごとの命令をアプリケーションは発生させることが
出来なくなってしまうので、そのままではロボットはいつまでも前進し続けることになって
しまいます。
OS が実行権を取得する事が事前に分かれば、ロボットに「止まれ」と命令をして、
実行権が戻ってきた時点で「進め」と命令すれば、何の問題もないのですが・・・
それとALTキー検出に何の関連が・・・
941 :
デフォルトの名無しさん :04/02/22 00:06
>>941 車運転するときはじーさんばーさんにクラクション鳴らさないように気をつけてる。
勝手に死なれちゃかなわん。
>>940 >それとALTキー検出に何の関連が・・・
別に ALT キーに拘っている訳ではなく、「モーダルな」動作に入ろうと
する時を確実に検出できればいいのですが。
>>943 そもそも
> アプリケーション実行中に Alt キーを押すと、OS が勝手にプロセスの実行の権利を奪ってしまいますよね。
と言う認識が間違ってる。
>943 スレッド使えよ
>>944 >と言う認識が間違ってる。
言葉の定義や概念の話はどうでもいいのです。
先ほども書いたように、「モーダルな」動作に入ろうとする時を
確実に検出する方法が欲しいだけなのですが・・・
フィルタドライバ作れば?
>>945 こんな些細な問題でスレッドは使いたくないのですが・・・
とかいいつつこのスレッドはもうすぐ終わりだよ
>>946 > 先ほども書いたように、「モーダルな」動作に入ろうとする時を
> 確実に検出する方法が欲しいだけなのですが・・・
MFC スレならともかく、このスレ的には ALT キーで「モーダルな」動作に入るのは「あんたのプログラムの動作」だよ。
やはりブロックしたくないならUIスレッドとロボット制御スレッドを分離した方が…
>>926 そうか、SetMapModeを設定したものを出力した時に、
縮小しているように見えたのは、DPIの設定が出来ていたということでしたか。
GetDeviceCaps(memhdc,LOGPIXELSX)が96のままだったので見過ごしていました。
納得しました。ありがとうございます。
ちなみに、この返り値96を変更するAPIはあるんでしょうか?
>>951 >「あんたのプログラムの動作」だよ。
それは要するに、メッセージや呼び出す API 一つ一つに常に注意して、
これ以降の処理はモーダルな動作に入るかどうかに気を配りながら
コーディングするしかない、という意味と解釈して良い訳ですか?
その点数が少ないのなら、そのような方針でも良いのですが、
もしそのような箇所が何十種類、何百種類も出てくると手に
負えなくなるのが目に見えるので。
本来、最初にスレッドを使うことを考えたんですが、それをやらずに
済むのならやりたくないので、もっと楽な方法がないか尋ねたんですが・・・
スレッドを使うことに抵抗があること自体、あまりにもスキル不足。 それはポインタがわからなくて関数化することに抵抗があるのと同じくらいの論外だ。
>>953 できない、システム依存。
画面の設定の詳細から変更した値が返る
>>955 スキル云々より移植性の問題が大きいのですが。
(シングルタスクの実行環境も考慮して実装している為)
元々言語自体に組み込まれているのなら
私も使う事に何のためらいもないのですが。
boostのthreads使えばいいじゃないか
>>957 ・シングルタスクの実行環境
・モーダルな処理がある
・定期的な処理をする必要がある
普通に考えたら、何かあきらめないと無理だと思う。
>>957 ハァ? スレ違いか???????????????????????????????????
>(シングルタスクの実行環境も考慮して実装している為) 意味不明。
タイマーでも使えばいいんじゃねーの?
>>961 DOS とかも視野に入れてるってことだろ。
だったらなおさらスレッドにしたほうが良いだろ イベント式じゃないOSだったらどうするんだよ
>>956 そうでしたか。ありがとうございました。
擬似スレッドを自分で実装して、使うしかないな。 がんばれ。
SHBrowseForFolder()をつかってディレクトリを選択させようとしています。 この関数の結果を絶対パスにする方法はありませんか? GetOpenFileName()なら、カレントディレクトリが変わっているので、 GetFullPathName()が使えたのですが、それもできません。
スレッドもまともに扱えないような人が作ったものを、 様様なOSで提供したとしても誰も欲しがらない。 そもそもシングルタスクって、いったい何のOSをターゲットにしてるんだ。 どうしてもマルチプラットフォームにしたいなら、それぞれで組め。 とりあえずWindowsではスレッドだ。それ以外に無い。
971 :
デフォルトの名無しさん :04/02/22 12:08
Buttonを押すメッセージを送りたいのですが、うまくいきません。 SendMessage(hwndBtn, WM_LBUTTONDOWN, 0, 0); SendMessage(hwndBtn, WM_LBUTTONUP, 0, 0); なにがいけないのでしょうか?
hwndBtnはEnumChildWindowsを使って取得しました。 GetWindowTextを使ってキャプションを見る限りは正しく 取得できていると思います。
>>969 SHBrowseForFolder()の返り血をSHGetPathFromIDList()で処理する。
>>973 thanks you!
ところで、MSDNによると、
>The calling application is responsible for freeing the returned PIDL by using the Shell allocator's IMalloc::Free method.
これを呼び出したアプリケーションは、戻り値のPIDLを、シェルアロケーターのIMalloc::Freeメソッドを用いて解放する責任を負う。
とありますが、こんなかんじですか?
LPITEMIDLIST p;
p = SHBrowseForFolder(...)
//必要な処理
IMalloc::Free(p);
もし解放しない場合は、メモリリークしますか?
>>974 ::CoTaskMemFree()でどうぞ
976 :
デフォルトの名無しさん :04/02/22 14:20
タスクトレイに常駐させる場合、 アイコンでなく文字列を表示させることはできますか? ツールチップではなく、 「日付と時刻の調整」のように、 トレイに文字列を表示させたいのです。
文字をビットマップ化してください
SetMenuを実行するとRuntimeError216が発生して悩んでいます。 解決方法のご教授お願いします。 関連するソースは以下の通りです(Delphi 6 personal)。 hM := CreateMenu; AppendMenu(hM,MF_STRING,IDM_FILE,'&File'); SetMenu(FHandle,hM); ※FHandleはクラスメンバでWndProcでウィンドウハンドルは代入済みです。 リソースで記述したメニューでも、 ウィンドウクラス登録時にwc.lpszMenuNameで設定した場合は、問題ないのですが、 WM_CREATEでLoadMenu、SetMenuで登録しようとするとやはりRuntimeError216が発生してしまいます。
>>978 CreateWindowで設定しないのはどうして?
CreateProcessで外部のコンソールアプリを実行して、その標準出力の内容を ログとして出力したいのですが、実現方法(標準出力の取り込み方法)をご教授 願えないでしょうか。
パイプ
>>980 C++でも起こるんですけど(^^;
(この場合はcpu100%に...)
Borland製(DelphiとBCC5.5.1)だから?
>>981 ウィンドウクラスで設定しておけば、問題ないのですが、
RuntimeError216が出る理由が解かるのでは?と思って聞きました。
>971 使ったこと無いけど"BM_CLICK"?
987 :
デフォルトの名無しさん :04/02/22 22:52
やっとバグがとれたよ・・・。この喜びをみんなにも分かってほしい・・・。
じゃ、コードどっかにうpして。
>>989 ありがとうございます。
パイプを使うのですね。試してみます。
>>990 前スレか、前前スレあたりでコンソールからのパイプについては
私が質問&研究しまくった。
ログあさってくれ。
結局他人のツールは、パイプされるのを意識して作られた(flushが所々で行われている)ツール以外は、
リアルタイム取得が無理であきらめた。
>リアルタイム取得が無理であきらめた。 あきらめるもなにも受け取ったバッファをコールバックで 通知するようなインターフェースにしとけばいいだけの話では。
いや、多分そういうことじゃなくてバッファリングの話じゃない?
>>991 は無効にできるのを知らなかったのだと思われ。
ライブラリレベルでのバッファリングは親アプリから制御できないだろ
新スレ立った?
>>985 ウィンドウクラスで設定しなくても、CreateWindowでダミーのメニューを与えておき、
あとで置き換えれば上手く行きませんか?
CreateWindowで与えないと、ウィンドウクラスのメニューしか使えなくなる気がします。
新スレ、誰か頼む。
998 :
デフォルトの名無しさん :04/02/23 02:19
999
1000 :
たねむら :04/02/23 02:21
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。