1 :
デフォルトの名無しさん :
2005/12/06(火) 00:59:05 スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。
過去スレ、関連リンクは
>>2-5 くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(
http://msdn.microsoft.com )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvencedWindowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで。
2 :
デフォルトの名無しさん :2005/12/06(火) 00:59:26
3 :
デフォルトの名無しさん :2005/12/06(火) 01:00:18
4 :
デフォルトの名無しさん :2005/12/06(火) 01:00:59
FindFirstFile()などでフォルダ内のファイル名を取得したいのですが、 このAPIが返すファイル名リスト(実際はリスト構造にはなってませんが) は日付が最新のものから順に入っているのでしょうか? そうでない場合、日付順にファイル名を取得する良いAPIはありますか?
>>6 たしかASCII順(ただし大文字小文字区別なし)
構造体の配列に溜め込んで日付でソートするといいよ
9 :
6 :2005/12/06(火) 01:28:06
ありがとうございます。 ということはいったん全部吸い上げてから調べないといけないんですね。 フォルダは所属しているファイルのうちどれが最新か知ってるはずだと 思うのですが、そういうAPIが無いのは意外でした。
ありません。 Windowsエクスプローラは、FindFirstFile/FindNextFileで取ってきた結果を リストビューコントロールに一覧表示してるだけですよ。
> フォルダは所属しているファイルのうちどれが最新か知ってるはずだと思う これどっから来たんだろう
12 :
6 :2005/12/06(火) 01:37:12
そうでしたか。 勉強になりました。ありがとうございました。
15 :
14 :2005/12/06(火) 01:39:56
ごめんFAT32でなくてWin9x系だったかも
16 :
6 :2005/12/06(火) 01:40:52
unixのディレクトリとWindowsのフォルダは同じ概念でしょうか?
DOS時代はディレクトリって呼んでたよ
>>8 NTFSだとそうかもしれんが、それ以外だとそうとは限らん。
確実なのはディスク上の順番で返すということだけ。
>>17 フォルダは概念、ディレクトリは実体。
例えば「デスクトップ」はフォルダ、"c:/Doc.../user/デスクトップ/"はディレクトリ。
21 :
デフォルトの名無しさん :2005/12/06(火) 11:12:48
>> Build37-990 コントロールをサブクラス化して、メッセージを処理するなり親ウィンドウに渡すなりすれば?
SendInput関数で スペースはVK_SPACEなどで表現できますが マウスの左クリックはどの様に表現すればよいのでしょうか。
>>22 WM_LBUTTONDOWN
直接SendMessegeする手もあるけど。
25 :
22 :2005/12/06(火) 12:29:43
前スレ990で、1000ゲッターに流されてしまったため(笑)、再度でつ。 WM_MOUSEMOVEメッセージについてなんですけど、 マウスカーソルがスタティックテキスト(含むグループボックス)の子ウィンドウ上の時にはメッセージ来るようなんですが、 他の子ウィンドウ(エディットコントロールやチェックボックスなど)上だとメッセージが来ないようなのです。 うまくスタティック以外のウィンドウ上でのマウスカーソルの動きをキャッチする方法はないのでしょうか。
WM_NOTIFY
>>27 それはコモンコントロールだけで、
エディットコントロールやチェックボックスなどでは来ませんし、
ステータスバーもクリックされないと親ウィンドウにWM_NOTIFYメッセージを発しませんが…
リソースで定義したダイアログをDiagAとします。 このDiagAを作るあたってDialogBoxマクロを利用する訳ですが、 DialogBoxの引数にプロシージャを指定する部位がありますよね。 ダイアログが作られた時、プロシージャへWM_CREATEメッセージは発行されないのでしょうか?
ううん、とあるデータをダイアログが作られた時に、ダイアログのプロシージャから操作したいのですけど。 なんかいい方法ないでしょうか。
>>31 WM_INITDIALOGメッセージだったかな。
聞いてることとずれてたらスマソ
WM_INITDIALOG
かぶった
WM_INITDIALOGがダイアログ作成に発行されました。 ありがとうございます・・・
>>36 ごめんあそばせ。
21さん見過ごしてました
どうもサンクスです。
できました。デフォルトの戻り値を0にすればよかったようです。 UINT_PTR CALLBACK OFNHookProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) { if (msg == WM_INITDIALOG) { SetWindowLong(hdlg, GWL_STYLE, GetWindowLongPtr(hdlg, GWL_STYLE) | WS_CLIPSIBLINGS); MoveWindow(hdlg, 30, 17, 300, 22, FALSE); CreateWindow("ComboBox", "", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_GROUP | WS_TABSTOP, 130, 0, 164, 100, hdlg, (HMENU)0x1000, Instance, 0); } return 0; }
質問です IStreamを実装してMyStreamってクラスを作りたいのですが この場合、IStreamで定義されているメソッドを使うためには、 IMyStream* mystream = hoge(); mystream->QueryInterface(...); でIStreamのインタフェイスを取得しないと使えないのでしょうか? そして、もしIMyStream*から直接使うためには、 多少宣言がIStream*と重複しようが、 idlでReadやWrite等を再定義していくことになるのでしょうか?
>>40 class MyStream :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<MyStream, &CLSID_MyStream>,
public IDispatchImpl<IMyStream, &IID_IMyStream, &LIBID_MyLib>,
public IStream {};
C++的に考えれば、これはMyStreamのポインタでIStreamのメソッドを呼べることになりますよね
でもこれはあくまでCOMライブラリを作る際に派生させただけであって、
結局COMを扱う側から見たら
interface IMyStream : IDispatch {}
でしかないのだから、MyStreamでIStreamを幾ら実装しようと、
直接はIStreamのメンバを呼び出せない、ということでいいのかな?
ていうか微妙にWin32の話じゃなくてすみません
ATLスレに行った方がよかったのかな
>>41 IStreamの各メンバはvirtual 〜 〜(〜) = 0;の抽象メソッド。
MyStreamはIStream派生クラスとして定義するからMyStreamをIStreamにキャストしてもMyStream上の実体を呼び出す。
43 :
デフォルトの名無しさん :2005/12/07(水) 11:38:35
LRESULT CALLBACK WndProc()での LRESUTLはtypedefされたC言語のデータ型と思っておいて良いですか?
>>43 そうだよ。
>>41 ところでIMyStreamがIStreamから派生しているのであれば、
MyStreamはIStreamを継承する必要はないと思うが。
>>44 すいません、また色々考え込んでしまって混乱してしまいました。。
IMyStreamはIStreamの派生ではありませんでした。
IMyStreamはプロジェクト構築時にデフォルトでIDLで
interface IMyStream : IDispatch {}
と定義されていました。
よく考えたらIDispatchの機能が必要がなければIDispatchから派生させる必要ないですね。
インタフェイスの継承をIDispatchからIStreamにすればよかったのかな、、
ちょっとこれから書き換えてきます。どうもありがとうございました
ここで俺の妄想を発揮。 45は別にIMyStreamやIStreamを実装したいのではなく、 CreateStreamOnHGlobalとかSHCreateStreamOnFile(Ex)を活用するだけで十分ではないか?
>>46 いあ、やろうとしてるのは、あるIStreamを食わせて加工出力するIStreamなんです。
COMは使うだけならあるにしても、作る側になったことは全然ないので
ATLとかの勉強ついでにやってる感じです。
で、とりあえずできたようです。本当にありがとうございました。
そしてなんか妄想まで働かしてもらってすみません。
本人乙
49 :
デフォルトの名無しさん :2005/12/07(水) 16:35:56
二つのテキストファイルが同じかどうかを 比較する関数を教えて下さい
ねぇよ
CreateFile GetFileSize xxxxAlloc ReadFile lstrcmp
53 :
49 :2005/12/07(水) 17:22:21
SHELLでFC使って上手くいきました あざーっす
エディットコントロールの縁に陰みたいな奴つけるにはどうすればいいですか
>>55 完全ハッシュでなければ衝突がありえるだろ。
毎回ファイル読み込んでハッシュ値出せってか?
コリジョンが発生してから調べなおせばいい。 同じファイルを何度と無く調べる、かつ各ファイルのそれなりの部分が同じとか言う場合にはまあ有効かな。 突発的にファイルを比較するだけなら無駄だけど。
Sleep()やWaitForSingleObject() に出てくるマクロのINFINITEって何の略なんですか?
Infiniteも知らんのか・・
中高で英語が1と2ばかりだった俺でも知ってるのに・・・
マジレスすると知識量と学校の成績は関係ない でもinfiniteくらいは、日常生活で1度は耳にしたことがあるはず
日産の高級車のブランド名だな
しかし finit が 有限 というのはあまり知られていない
eが抜けてんぞ
finit がフランス語だということはさらにほとんど知られていない
Windowsのイベントログに関する事で質問です 通常2000とかXPには システムイベントログ アプリケーションログ セキュリティログ などがありますが、 それ以外のログを自前で生成し、 「コンピュータの管理(MMC)」に 追加することは可能でしょうか?
finishやfinalと語源が一緒というのはあくまで俺の想像
>>66 がフランス語のfinitを出したとはとても思えない件
finite state machine の検索結果のうち 日本語のページ 約 10,700 件 finit state machine の検索結果のうち 日本語のページ 約 250 件 250件もあるのかよ
vcでデバッグ中にイベントハンドルがシグナルなのか非シグナルなのか 知りたいんだけど、何かいい方法はないでしょうか?
>>73 ProcessWalkerで見れたと思う。
75 :
デフォルトの名無しさん :2005/12/09(金) 03:31:22
質問させてください。 C言語とAPIでMS-Word やメモ帳で入力されたキーを取得するプログラムを 組んでいます。グローバルフックで MW_KEYDOWN を取得する方法でやって いるのですが、MS-Word の場合だけ、1回のキー入力に対して5回の WM_KEYDOWN が来ます。WM_KEYDOWN メッセージの lParam の31バイト目を チェックしてみたのですが、キーを押し続けたことによる連続メッセージ ではないようです。また、MW_KEYUP でも同じく5回メッセージがきます。 1キーに対して1回のメッセージを受け取りたいのですが、よい方法は ないでしょうか。よろしくお願いします。
>>75 俺のPCにWord入ってないから試せないんだが、Spy++でも5回表示される?
あとWordのバージョンは?
77 :
デフォルトの名無しさん :2005/12/09(金) 05:40:25
>>76 >>76 レス遅れてすみません。Spy++ っていうのがググッたけどちょっとわからないん
ですが、BCC のコマンドラインコンパイラなんでたぶん使ってないと思います。
Word のバージョンは 2003 です。
一応、フックしたキーをウインドウに表示するようにしているんですが、
メモ帳やInternetExplorer に入力した場合、そのとおり別ウインドウにも
表示されるんですが(1キー入力に対して1文字)、WORDの場合だけ1入力に
たいして5回分表示されるんです。"aiu"だったら"aaaaaiiiiiuuuuu"という
具合です。ちなみに、Enter や Shift なども同じです。
とりあえず、Spy++についてもう少しググッて見ます。
>>77 Spy++はMSの開発環境についてくる便利なツール。
特定ウィンドウに送られたメッセージのログを表示することができる。
BorlandにもWinSight32っていう同じようなソフトあるんだけど、
無料のBCCに付いてくるのかは知らない。
Winspector Spyっていうフリーのがあるよ
C勉強してきてこれから窓プログラム入る 必要なのは脳とやる気だけでおk?
あとは開発環境があれば完璧
spyもなー
DialogBox上にlogを表示させたいと思っています。 edit boxでやったら改行ができませんでした。 static textでやったら、改行はできましたが、自動スクロールができません。 両方とも必要なのですが、簡単に実現する方法はありませんでしょうか? ありましたらお教えください
>>79 特警ウィンスペクターを思い出した漏れはおこちゃまですか?
>>85 style に ES_MULTILINE (+ WS_VSCROLL|WS_HSCROLL) で エディットCTRL生成
nLen = GetWindowTextLength(エディットCTRL);
EM_SETSEL で START:nLen END:nLen で末尾を選択
EM_REPLACESEL でLogとして追記したい文字列を渡す (改行したいなら CRLF を入れること)
90 :
デフォルトの名無しさん :2005/12/09(金) 17:29:32
ビュアチェインに関してです 例えば現在4個のクリッポボードビュアA,B,C,Dが起動してるとします。 そしてそれぞれのビュアの順位はAを最上として A B C Dとします。 例えばBがChangeClipboard()を実行しますと、AにはWM_CHANGECBCHAINが送られてきますよね。 WPARAMにはBのhWndが、LPARAMにはCのhWndが格納されているはずですので、 Aは自分の次のビュアのウィンドウハンドルを確認し、もしWPARAMと等しければAの次のビュアのハンドルを、 LPARAMのハンドルに入れ替えればいいと思います。 しかしBではなくCがChangeClipboard()を実行した場合どうしますか?もし上の手順をしてしまったら、 Aの次のビュアはDとなってしまい、Bの存在がまずい事になります・・・ かといってこのメッセージを無視し、実行するとBの次のウィンドウはCだが・・・Cのハンドルは無効 という事態になると思います。 長くなりましたが、上のような場合はSendMessageでBにWM_CHANGECBCHAINを送れば回避されます。※1 しかし、例えばA B C D E Fとチェインがあった場合、DがChangeClipboard()を実行し、Aが※1を実行するとなると Cのハンドルを知る必要があるのです。ですが、WM_CHANGECBCHAINのパラメータにはDとEしかありません。 どうすればよろしいでしょうか・・
※1もCとDは自分(最上)からすれば、何番目なのか予測不能でしたね・・すみません
>>90 ChangeClipboardChainだよな。
> しかしBではなくCがChangeClipboard()を実行した場合どうしますか?もし上の手順をしてしまったら、
そのときにWPARAMの中身はCとなり、Aにとっての次であるBとは違うから、
「Aは自分の次のビュアのウィンドウハンドルを確認し、WPARAMと等しければ」という条件が成り立たない。
>>87 ありがとうございます
ちょっとやってみます
>>92 else if (hNextWnd) SendMessage(hNextWnd,msg,wParam,lParam);
と流していけばちゃんと修正されますね・・自己完結してすみません
95 :
73 :2005/12/09(金) 19:14:32
>74さんありがとうございました。 無事に各ハンドルの状態を調べることが出来るようになりました。
>>93 です。
さっきのはうまくできましたが、また問題点が発生しました。。
入力が終了してenterを押すとボタンがおされたのと同じ処理をできるようにできませんか?
dialogでやる方法はわかったのですが,通常windowでやる方法がわかりません
>>96 [Enter]にアクセラレーターを割り付けてしまう。
VirtualAllocでRESERVEした量って、タスクマネージャの「仮想メモリ」 に出ると思ったら出ないのな・・・
99 :
デフォルトの名無しさん :2005/12/09(金) 21:22:12
すんません。 CreateService()つかって、Windowsサービス作ってるのですが、 メールスロットでイベント起動される(サーバー側)ように 作りたいのだけど。イマイチよくわかりません。 もしかして、Windowsサービスには向かないの?
ダメです
101 :
デフォルトの名無しさん :2005/12/09(金) 22:10:55
MFCのどこが楽なんだ…
104 :
デフォルトの名無しさん :2005/12/10(土) 00:04:44
任意のウィンドウを半透明化する処理を書いているんですが、 透明度の設定はSetLayeredWindowAttributes でできるものの、透明度を取得する方法がわかりません。 LayeredWindowであるかどうかは取得できるんですが・・・
>>104 その逆でGetLayeredWindowAttributesを使えばAlphaが取得できますよ。
>>105 ありがとうございます。調べてみます
でもググるとヒット数が少ないのはなんでだろう・・
流行らないから
2kじゃSet〜は使えてもGet〜は使えないし。
109 :
デフォルトの名無しさん :2005/12/10(土) 00:59:19
スルーされたというより答えられる香具師がいなかったようなので再掲です Windowsのイベントログに関する事で質問です 通常2000とかXPには システムイベントログ アプリケーションログ セキュリティログ などがありますが、 それ以外のログを自前で生成し、 「コンピュータの管理(MMC)」に 追加することは可能でしょうか?
アレです。
叶京子
叶兄弟
兄貴ぃっっ!! もうっ・・・ダメタだっ!!!
>>111 管理コンソール MMC に新規 log を追加する Win32API を教えて下され候
116 :
デフォルトの名無しさん :2005/12/10(土) 07:36:05
BCCを使っています。 デバッグ出力についてなのですが、Windowsにおける大量のシンボルの名前を表示するいい方法はないのでしょうか? 例えば、ウィンドウプロシージャに来たメッセージをデバッグ出力したいのですが、 printf("uMsg = %s", GetMessageSymbolName(uMsg)); -> "uMsg = WM_PAINT" とかできないのでしょうか? HRESULT hr = CoInitialize(...) printf("hr = %s", GetHResultSymbolName(hr)) -> "hr = E_OUTOFMEMROY" とかは? なにかVCとVC用デバッガを使うとそれに近いような事も出来るみたいなのですが、BCCとTurboDebuggerでは出来るのかどうか分かりません。 BCCでWindowsのシンボルをうまく表示できる方法、あるいは表示してくれるライブラリなどはないでしょうか? というか、Windowsに限らず、一般的にヘッダで大量のシンボルがある場合、みなさん、どうしているんですか?
トークン連結演算子 (##)
>>116 Windowsメッセージなら、spyでいいと思うよ。
すいません どこみてWin32APIの勉強すればいいですか?
121 :
117 :2005/12/10(土) 13:00:54
おいおい、ボケたつもりは一切なかったのに華麗にスルーかwwwwwww
>>116 ソースコードに仕込むなら、↓こんな手もある。
#if defined(ENABLE_LOG)
# define CASE_WITH_LOG(wm_msg) \
case wm_msg: printf("uMsg = " #wm_msg);
#else
# define CASE_WITH_LOG(wm_msg) \
case wm_msg:
#end
ただ、あんまり見目麗しくないけどね。
Win32API一覧、どこかに落ちて無いですか? MSDNは機能別になってるので探し辛い。
124 :
デフォルトの名無しさん :2005/12/10(土) 15:36:49
SetCurrentDirectoryでカレントディレクトリを動かした後、 GetOpenFileNameで初期ディレクトリをNULLにしても、 指定した初期ディレクトリになってくれないんですけど、 何が原因なんでしょうか。
釣りなのか天然なのか、そこが問題だ。
本気なのでおねがいします
131 :
124 :2005/12/10(土) 16:27:03
>>125 上げてすみません。
ありがとうございました。
単なるダイアログだろこれ。 MFCとかWTLベースだと作りやすい。
釣りにきまってんだろカスwwwwwwwwwwwww
GetSysColor(BTN何たら)でその色を得られたと思う。
Lunaスタイル環境でクラシックスタイルのウィンドウを 強制的に使うにはどうしたらいいか尋ねているようにも見える。 な、わけねーだろ。言ってみただけだ。
マニュフェストファイル無かったらLunaスタイル無効だと思うが
CreateWindowのウィンドウクラスにEDITだとかLISTBOXを指定して、 スタイルにWS_VSCROLLを指定した場合、表示されるスクロールバーが Lunaスタイルなっちゃうんだけど、これをクラシックスタイルにする方法ってある?
>マニュフェスト なんかえろくね?
DWORD t = REG_SZ; DWORD b = 32; char c[50]; RegOpenKeyEx(HKEY_CURRENT_USER, "Environment", 0, KEY_ALL_ACCESS, ®); RegQueryValueEx(reg, "Path", NULL, &t, (BYTE *)t, &b); CURRENT_USER\EnvironmentにPathは存在しています RegOpenKeyExは成功しますが、RegQueryValueExが失敗します。 何が駄目なのでしょうか。
>>124 確実にカレントにしたかったらNULLの代わりに"."を指定すれ
>>137 互換モードで視覚テーマを無効にする。それをプログラムからやる方法は分からんが
>>141 REG_SZ(1)をポインタと解釈したら確実に無効なポインタだから
>>143 RegQueryValueEx(reg, "Path", NULL, &t, (BYTE *)c, &b);
でも0以外が返されます
>>144 いくつが返ってきてるのさ?234じゃねーよな。
146 :
144 :2005/12/10(土) 21:26:24
どうみても234です。
147 :
144 :2005/12/10(土) 21:35:37
解決しまうま なんちって
エラーコードの意味ぐらい調べろよ・・・
149 :
144 :2005/12/10(土) 23:30:14
レジストリに追加したんだけど有効にならない 具体的にいうと、 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Session Manager\Environment のPathにデスクトップのパスを追加したのですが、有効になってないようです。 マイコンピュータのプロパティから環境変数を見てみると、ちゃんと追加されています。 それでそこのOKを押すと有効になります。
>>127 ありがとうございます。
でも、そこに載ってるのは全部のAPIじゃ無いですね。
レジストリでんでん以前に、環境変数というのはそういうものだ。
153 :
144 :2005/12/10(土) 23:51:54
>>151 マイコンピュータのプロパティから環境変数Pathの設定をした場合はすぐに有効になりますが、
それはどうやってるのですか
システム(エクスプローラか?)に環境変数の変更を強制する手段が 「どこかに」あるんだろう。 俺は知らん。
>>152 winsockとかshell apiとかodbcとかその他多数。
狭義のwin32 apiだとそんなものまでは含まれないのか。。。
隠しAPIのことかとオモタ
隠しAPIならOS周りのDLLをdumpbin /exportsとかすれば出て競う。
>>153 WM_SETTINGCHANGEをブロードキャスト
Vistaには今まで隠しAPIだったものを名前だけ変えて出してきたようなものがチラホラ GetFileInformationByHandleEx/SetFileInformationByHandleとかテラワロス
Win32アプリってVC以外じゃできないんですかね? Javaで使ってたeclipseの快適さが忘れられない。
>>160 っ[ Delphi, BCB, VB ]
162 :
デフォルトの名無しさん :2005/12/11(日) 01:41:18
VC++でIEコンポーネントを使ってるんですけど 右クリックしてコピーを選んでもクリップボードにコピーされません 他の”前へ戻る”とかは全部きちんと動くんですけどコピーだけ動かないです どうしてなんでしょうか?
隠しAPIって、勿体つけて隠してたんじゃなくて、 安定性・安全性に自信がもてなかったから非公開にしてただけでしょ。
まぁ、そんなものが隠されているとは言え組み込まれていること 自体に問題があるんだけれどもね。
とはいえ、隠しAPIには便利なのが多いんだよな。
隠されたものにはロマンがある。
公開されたものが安定性・安全性に自信があるとは思えんのだが
画像を透過させて表示する方法を教えて頂けませんか? 今まではBitBltでSRCPAINTとSRCANDを組み合わせて透明化させていましたが、 この方法ではマスク用の画像も用意する必要が出て来てしまいます。 マスク無しで透明化させる方法の伝授をよろしくお願いします。
170 :
デフォルトの名無しさん :2005/12/11(日) 09:06:55
VC++でIEコンポーネントを使ってるんですけど 右クリックしてコピーを選んでもクリップボードにコピーされません 他の”前へ戻る”とかは全部きちんと動くんですけどコピーだけ動かないです どうしてなんでしょうか?
ヒント: クリップボードは二種類ある
172 :
デフォルトの名無しさん :2005/12/11(日) 09:35:26
Win32APIで取得したWin32のデータ型の変数をprintfなどで整形しようとすると、 型の互換性などで悩んでしまうけど、その辺他のプログラマーはどのようにやってる んですか。
お前の悩みが俺には理解できない
悩んだこと無いな
175 :
デフォルトの名無しさん :2005/12/11(日) 10:17:30
大悩みしないのが理解できない。 どうすればいいんだろうな。
176 :
デフォルトの名無しさん :2005/12/11(日) 10:21:58
CStringとstringとstrXXX系の関数みたいな関係かな。
基礎からやり直すのがいいだろうね。
178 :
デフォルトの名無しさん :2005/12/11(日) 10:27:27
何の基礎からやり直せばいいんだ。
179 :
デフォルトの名無しさん :2005/12/11(日) 10:29:02
Win32の基礎からか、それともCの基礎からなのか。
コンピュータサイエンスの基礎
182 :
デフォルトの名無しさん :2005/12/11(日) 10:42:38
何でそんなぼろくそに言われなければいけないんかね。 俺よりプログラムの理解が下の奴はいるぞ。
>>182 > 俺よりプログラムの理解が下の奴はいるぞ。
そんなモン誰にでもいるだろ
184 :
デフォルトの名無しさん :2005/12/11(日) 10:47:31
他人は当たり前に分かって馬鹿らしいことかも知れないけど、俺には分からないんだ。 教えてくれる人いないのかな。
人間の基礎はAPIの基礎。 APIの基礎はCの基礎。 Cの基礎はコンピューターサイエンスの基礎。 結局は全部同じもの。
ネタに混じれ酢カコワルイ
188 :
デフォルトの名無しさん :2005/12/11(日) 10:59:21
コンピュータサイエンスが理解できたからと言って、Win32で定義したデータ型 が普通のデータ型のどれと互換性があるかが分かって、どの書式指定文字を使えば いいかが分かるわけでは無いと思うんだが。
189 :
デフォルトの名無しさん :2005/12/11(日) 11:05:50
>>182 下がいるとかいないとかもこの問題とふさわしくないだろ。
ただ、最近、知識も無いのにやたらめったら叩きレスを返す奴がいるから
注意したほうがいいと思う。
で、なにやら偉そうだから知識があるのかと思いきや、どうもプログラムも組めない気がする。
ってか、実力が無い。
こういう知りもしないのに、わかったつもりになってとりあえず叩く的な奴が出てきたのは
ここ最近のような気がする。
多分、ちょっと前の「ヘルプも見ずに質問してくるアホを叩きだす」流れで成長した奴が
自分もちょっと理解できるようになってレスを付けるようになって質問する奴を無差別に
叩きまくってるだけのような希ガス。
似たような分野のスレに似たようなレスがつくようになってるから注意したい。
レベルが低いからすぐわかるけど。
>>172 「Win32のデータ型」などと言うものはない。
結局は、構造体やCの基本型のtypedefに過ぎない。
とりあえず、ヘッダでどう宣言されているか、調査してから質問して欲しいものだね。
後、「Win32のデータ型」なんて言う、オレ用語は使わないで貰いたい。
>>188 コンピュータサイエンスの基礎が理解出来ていれば、Win32でデータ型を定義している訳ではない事位、普通に理解出来そうだが?
>>191 俺は
>>172 ではないけど、そこはレスの全体の意味を組んでやればいいような気がするんだが・・・。
そんなとここだわんの?
なんかここって質問し難い掲示板になったなぁ・・・って思う。
ちょっと前なら、レスに意味不明な部分があったら、せめて
>>172 Win32のデータ型とはなんぞや?
定義されてる構造体のことなら〜だよ。
ってレスがついたけどもね。
最近はいきなり「カー」っとなって「ヒー」っとなって酷いねw
スルーされたというより答えられる香具師がいなかったようなので再掲です Windowsのイベントログに関する事で質問です 通常2000とかXPには システムイベントログ アプリケーションログ セキュリティログ などがありますが、 それ以外のログを自前で生成し、 「コンピュータの管理(MMC)」に 追加することは可能でしょうか?
172から188まで呼んだけど何が悩ましいのかわかんない。 win32 と win64 で共有できる printf の書き方が悩ましいというならわかるけど win32 限定なら MSDN のマニュアル見て型のバイト数と符号を確認するだけのこと。 むしろ型のバイト数と符号が処理系依存の「普通のデータ型」のほうが悩ましくて。
>>196 ご回答ありがとうございます。
でも、サーバーコンポーネントにDNSを追加したり
ドメインコントローラに参加したりするといつの間にか
ログが増えているのですが、あれはどうやってるのかなと
思いまして。
やはり非公開APIがあるんでしょうね。
>>193 元々、質問しやすい所でもなかったと思うが…。
それより、ヘッダの宣言を確認すれば解る様な事をいちいち質問する方が如何なものかと。
単発質問スレ立てるのと同じ位迷惑だと思う。
>>197 UNIXでいうとsyslogのfacilityに相当するんで
facility eventlog win32api
とかでぐぐってみたんだが、出てこないな。
非公開だろね。
>>194 イベントビューアの「アプリケーション」に独自のログを書き込むのは可能。
「コンピュータの管理(MMC)」に独自のスナップインを追加してそこにログ出力するのも可能。
イベントビューアを改変して独自の項目を追加するのは不可能っぽいけど俺が知らんだけかも。
>>199 いや、そんな話でもないでしょ?
なんか便利なAPIかツールでもないですか?って話かもしれないことは容易に想像つくわけで。
こういうの気軽に聞けない雰囲気ではなかったよ。
ちょっと短気なのが多くなったせいもあって全体的にそういう空気ができちゃってるね。
>>202 もしそうなら GetLastError とか FormatMessage くらいしかないだろうね。
イヤです
209 :
201 :2005/12/11(日) 12:54:34
>>204 >>205 情報ありがとう。ざっと読んだだけだけどその方法で普通に出来そうですね。
「アプリケーション」に独自のログを書き込むだけも糞面倒くさかったんで
とりあえず仕事を終わらせて、そっから先はポイしてた・・・
210 :
201 :2005/12/11(日) 13:01:12
>>206 ピンポイント爆撃乙。194の質問はこれで終了でFA。
211 :
デフォルトの名無しさん :2005/12/11(日) 13:50:35
__int64やLONGLONGの型の変数をprintfで64ビットで表示しようと考えて、 例えばVisual C++ .net2003のコンパイラで、 printf("%llx\n", n); では32ビット分しか表示しません。 printf("%qx\n", n); printf("%l64\n", n); printf("%l32\n", n); では%や%lが無視されます。 64ビットに対応した環境でのみ表示できるのですか。 またぼろくそに言われるのだろうかな。
訂正 printf("%l64x\n", n); printf("%l32x\n", n);
16進表記なのであれば、上位DWORDと下位DWORDを続けて出力すればいいだけだろ。
printf とWin32APIにどんな関係が?
だからちゃんとC勉強してこいよ
初心者はなぜか_int64やLONGLONGが好きだよな あと最適化とか
218 :
デフォルトの名無しさん :2005/12/11(日) 14:19:09
何を馬鹿にしてるのかね。 64ビットで出力するのが本当の目的ではない。 GetDiskFreeSpaceEx()関数のPU_LARGE_INTEGER型の引数で取得した値を をprintfで対応する書式指定子は何になるかを調べたかっただけだ。
こういう人は128ビットとかでてきたらどうするのかね? かわいそうなやつだな
Win32と標準関数の違いも分からず、MSDNすら調べられない厨でしたか。
MSDNぐらい自分で引けるようになろうね
224 :
デフォルトの名無しさん :2005/12/11(日) 14:43:30
何言ってんだ。wsprintf()のトピックの書式指定子の解説にも載ってなかったら仕方ないじゃないか。
ここでとんちんかんにC++のiostreamなら型指定を考えずに済むと言ってみる。
>>224 wsprintfなんて一言も言ってなかったじゃないか。
ロボットじゃ無いんだから、printfの方も見てみるとか機転を利かせようね。
>>218 もちろんprintfにはQuadPartメンバを渡してるんだよな?
LARGE_INTEGERは共用体として定義されてるお
>>198 ただのC++しか作れませんでした。
Win32は無理っぽい。
MSDNは日本語と英語の内容は合わせて欲しい。 重要な補足事項とかが日本語の方には無くて結局英語の方も見ないといけないじゃないか。
中途半端な翻訳するくらいなら、いっそ日本語版は無くした方がいいと思う。
>>230 MSの技術情報みたいにサイトでの自動翻訳が良いね。
英語で十分。
でも完璧な日本語があるならそっちの方がいいけどね。
カスタムログってメッセージDLL作ってイベントログに自前の文字列出す方法だろ?
>>194 の質問に対する回答にはなってないと思うけど
間違えた PU_LARGE_INTEGER ではなくてPULARGE_INTEGER
PUGELA_INTEGER
コンパイルエラー
どうでもいいけど 英語で書かれたマニュアルなら 英語で呼んだほうが、誤解が少ないんじゃまいか? 翻訳に完璧はないわけだし。 なので留学はマジでおすすめ。
240 :
デフォルトの名無しさん :2005/12/11(日) 17:07:10
Win32のデータ型と言っておいて別にいいじゃないか。 その程度の知識くらい知った上で便宜上言ってるのにな。
241 :
デフォルトの名無しさん :2005/12/11(日) 17:08:59
Win32の疑似データ型とでも言っておこうか? 否定する奴は、何て呼び方をしてるんだ?
すごいスレが伸びていたので覗いてみたら自作自演の祭りでした ありがとうございました。
243 :
デフォルトの名無しさん :2005/12/11(日) 17:16:38
シャットダウンするときに再起動するか休止状態にするかスタンバイか などを選ぶダイアログが出るけど、前回の選択肢を記憶していてそれを 表示しているみたいなんだが、選択して再起動などをせずに表示される 既定を変えるにはどうしたらよいですか。 毎回休止状態を使うけど、ごく稀にシャットダウンする。次は休止状態 にしたいけど、惰性でエンターを押すとシャットダウンになっちゃう。 これを防止したい。選択出さないで直接やりなってのは不可。 こどもが電源ボタンを押しちゃうので予期せぬシャットダウンなどを防 ぐためにも選択ダイアログを出すのは必要。
245 :
デフォルトの名無しさん :2005/12/11(日) 17:38:32
Win32のデータ型はないなら、文字列を扱うWin32API関数などは、末尾にAやWの付かない名前の関数名を言うと、 そんな関数は存在しないと主張するのかね。 つまらないレスが伸びてしまう結果になったのは残念なことだ。
バカはもう来なくていいよ
247 :
246 :2005/12/11(日) 18:00:34
誤爆スマソ
248 :
246 :2005/12/11(日) 18:19:19
誤爆っぽくねぇwww
250 :
246 :2005/12/11(日) 18:27:13
>末尾にAやWの付かない名前の関数名 名前はどうでもいい 実体が問題なんだろ
馬鹿なリンカなら「無い」とエラーメッセージだすだろうな
254 :
デフォルトの名無しさん :2005/12/11(日) 19:36:16
もう一つ気になるのは、例えばアプリケーションを終了するときはWindowsから何のメッセ ージが通知されるのかな。 WM_DESTROYメッセージと言えば否定されるのかな、0x0002が通知されるのだと主張される のかも知れんな。
255 :
デフォルトの名無しさん :2005/12/11(日) 19:45:08
なんかどっちにしても
>>172 の質問は意味がわからなかったけどなぁ。
後問題はWin32固有の問題ではないわけよね?
処理中にOSをシャットダウンされると困る部分があるのでOnQueryEndSession
にて終了処理を受け取っていますが、ここで再起動を選択されたのか、それとも
シャットダウンを選択されたのか判別する方法ってありますか?
ログオフかどうかなら lParam で分かりますが
求めているのはそれではないんですよね?
無理矢理ですが、DLL を他プロセスに注入して
ExitWindowsEx や InitiateSystemShutdownEx 等を
フックするというのはどうでしょうか?
実際に可能かどうかは分かりませんが。
調べれば調べるほど無理っぽい感じがしてきました・・・
>>114 さんのレジストリをヒントに、OnQueryEndSession中でレジストリを
取得して保存しとけば差分で調査できるかもと思ったので
明日にでもOnQueryEndSession時にレジストリが変更されてないか
調査してみます。もし分かったら書き込みますね。
112さん、114さん、ありがとうございました。
Windows 2000 ですが、実際にやって調べてみました。
HKCR\Software\Microsoft\Windows\CurrentVersion\Explorer
の Reason Setting と Shutdown Setting が変化するようです。
(どちらも DWORD 値)
シャットダウン
Shutdown Setting=0x00000002
Reason Setting=0x00000005
再起動
Shutdown Setting=0x00000004
Reason Setting=0x00000005
ログオフ
Shutdown Setting=0x00000001
Reason Setting=0x00000000
ちなみに、regmon という
レジストリ操作を監視するツールを使って調べました。
HKCR\Software\Microsoft\Windows\CurrentVersion\Explorer
Shutdown SettingとReason Settingのキーは無いようです。
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer
には存在していましたので、こちらで試しています。
OSのシャットダウン時の処理なので、ちゃんと動くまで再起動しまくって
いるので時間かかるー(笑)
キーさえ分かればきっと情報があるはずだ、ということで検索してみた。
ttp://www.microsoft.com/windows2000/techinfo/reskit/en-us/regentry/36031.asp これによると Shutdown Setting はあくまでダイアログでの選択値のようっす。
Reason Setting の方は見つからず。
>>255 どうでもいいが、そのリンク先に気になるものがあるんだが
さっきはエロゲーの宣伝が出てた
>>257 シャットダウンされたら困るのに再起動されても困らないの?
>>241 > 否定する奴は、何て呼び方をしてるんだ?
総称で呼ぶ機会もないし、
今後も総称で呼ぶ機会が出てくる気配もない。
あえて言うならデータ型で事足りる。
君らが言う「Win32のデータ型」をわざわざ区別する必要性も感じない。
個別にdefineやtypedefされているので、
そのdefine名やtypedef名で呼ぶ機会は多々あったし、
これからもその機会は多々あるだろう。
266 :
デフォルトの名無しさん :2005/12/12(月) 00:48:24
>>265 すでに定義されてるものと被らないようにしてね。
って会話の流れならWin32のデータ型って使うけどね。
特別win32に限定するものじゃないと呼ばないかもな。
でも、あんまこだわるところじゃないよ。
もうレスの概要は伝わったんだし、粘着にもほどがあるよ。
ホント、この掲示板なんでこんな奴増えたんだろ。
268 :
デフォルトの名無しさん :2005/12/12(月) 09:31:24
ツールバーのボタンに描くビットマップが 透過されたりされなかったりしますが、 その条件、法則はなんなんでしょうか。 実験した範囲では、VC、BCCで、外部に置くと、 16色の場合、黒(パレット0かも)が透過され、 リソースに含むと透過されませんでした。
269 :
デフォルトの名無しさん :2005/12/12(月) 10:57:24
対象となるウィンドウ領域に マウスポインタが外から入ってきたときの イベントに対する処理をしたいのですが いくら調べてもそれらしきメッセージがありません 似たものとしては WM_SETFOCUS というのがあり, これはウィンドウ領域がクリックされたときに来るメッセージですが やりたいのはクリックしなくてもポインタが入っただけで 来るメッセージです
GetMessageではなくPeekMessageを使ったメッセージループで、 常にメインウィンドウにInvalidateRectを送り続け、 画面を更新し続けるプログラムを作っているのですが、 ウィンドウのタイトルバーをマウスでドラッグ&ドロップしている最中に クライアント領域が更新されません。 デバッグ出力等を見る限り、ドラッグ&ドロップ中も InvalidateRectの発行も、WM_PAINT受信によるクライアント領域の更新も行われているはずなのですが、 ドラッグ中はドラッグ開始直前の絵のままで、 ドロップ後に突如絵が変わるという状態になってしまっています。 ウィンドウのドラッグ&ドロップ中にクライアント領域を実際に書き換える方法はないのでしょうか?
PeekMessageで?
そもそもInvalidateRectし続けるくらいなら、メッセージループから 直接描画した方がいいと思うけどな。 ただ、それだとドラッグ中に描画されないのは解消されないが。 一番いいのはマルチスレッド化して、画面の更新とメッセージループを 別のスレッドにする方法。 もう1つはあまり薦めないが、SetTimerを使って画面を更新する方法。 ただしこれはドラッグ中は更新されるが、タイトルバーをクリックしたまま 全くマウスを動かさないでいると更新されない。
>>271 ドラッグ中はシステム側のメッセージループが回ってるはずで
>InvalidateRectの発行も
はありえないはずなんだが。
>>271 Windowsの画面のプロパティで、
「ドラッグ中にウィンドウの内容を表示する」
にチェック付ければいいんジャマイカ?
ドライブの情報を取得するときにUSBの外付けHDDとかを認識する方法はありますか?
GetDriveType()ではダメですか?
278 :
デフォルトの名無しさん :2005/12/12(月) 19:38:49
デバイスコンテキストの質問です 2枚のbitmap画像をそれぞれ読み込んで2枚の画像同士を重ね合わせてする出力が上手くいきません 最初のBitBlt()関数の画像だけしか表示されない状態で困っています すみませんが知恵を貸して下さい BitBlt(hdc, 130, 28, w, h, hdc_mem, 0, 0, SRCCOPY); BitBlt(hdc2, 0, 0, w, h, hdc_mem2, 0, 0, SRCCOPY);
279 :
デフォルトの名無しさん :2005/12/12(月) 19:43:48
コピー先のメモリデバイスコンテキストへ、扱える画像は一枚だけなのかな・・・
そりゃコピー先が違えば表示されないだろうな
281 :
278 :2005/12/12(月) 20:02:10
>>280 コピー先を同じに変えて、上手く重ね合わせることができました
有難う御座いました
釣りじゃなかったのか。平和だな。
質問です SHELLで同期とる方法教えて下さい
>>283 しぇるでどうきとる
しぇるでどうきとる
だじゃれができそうです。
ちょっと待ってて。
>>283 昭和シェル石油のガソリンスタンドで待ちあわせすればOK。
くれぐれも他の客の邪魔にならない場所に陣取ること。
変な嵐がいるから他スレで聞いたほうがいい
287 :
276 :2005/12/12(月) 22:31:05
>>277 GetDriveTypeをつかうと固定でもUSBでもHDDなら同じ値が帰ってくるのです・・
猫でもわかるwindowsプログラミング買ったけど 著者のホームページ見に行ったら少し欝になった 本より詳しく書いてるじゃん
291 :
271 :2005/12/13(火) 10:17:41
家のIPが規制されてて2chに書けない...
>>272 そうです。PeekMessageで
>>273 やはりGetDCして描画すべきでしょうか
>>274 どうやら私の勘違いで仰るとおりだった模様です。
今、WM_NCLBUTTONDOWNでDefWindowProcに処理を渡さずに
SetCaptureでカーソルのキャプチャを開始し、WM_MOUSEMOVEで
ウィンドウを移動、WM_LBUTTONUPでReleaseCaptureするようにしたら、
望んでいた動作をさせることができました。
ありがとうございます。
>>275 付いている状態で、ですね。
というわけで、ウィンドウ移動時の問題は解決しました。
ありがとうございました。
292 :
271 :2005/12/13(火) 10:28:15
>>291 で以前の問題は解決したのですが、
また別の問題が発生しました。
タイトルバー等で右クリックした時にも動作が止まってしまいます。
どうやら何らかのメッセージをDefWindowProcに渡すと
TrackPopupMenuか何かを内部で呼び出すようです。
試しにWM_NCRBUTTONDOWNでDefWindowProcを呼び出さないようにすると、
システムメニューそのものが表示されなくなったのですが、
タスクバーで右クリックするとタスクバー上にシステムメニューが表示され、
やはり動作が止まってしまうので、WM_NCRBUTTONDOWNでDefWindowProcを呼び出すことが
直接の原因ではないかもしれません。
一応試しにWM_NCRBUTTONDOWNで
UINT uItem = TrackPopupMenu(GetSystemMenu(hWnd, FALSE), TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, hWnd, NULL)
こんな風にしてみると、標準の動作に近くなったのですが、
TrackPopupMenu内部でメッセージループが回るようで、
自分が作ったメッセージループには処理が戻ってきません。
標準動作に近い形で、常に自分のメッセージループに処理を戻したいのですが、
いい方法はありますか?
TrackPopupMenu以外の方法でHMENUをポップアップ表示できれば、
後は自分で似た動作を作りこむことができそうなのですが、
その方法も解りません。
>>292 メニュループなんかは、システムが内部で持ってるので、それ使わせず、
自前のループに戻す方法はないと思う。
ただ、システム内部のメッセージループはAPCの処理はしてくれた記憶があるので、
別スレッドで適当にSleepしながらループまわして、画面更新をAPC経由で呼び出せば
いいと思う。
APCじゃなくて、直接呼ぶのはアウト。
友達に今時Win32API勉強しても何のメリットもないと言われた 実際どうなの?
とても役に立つがビジネスで考えるなら意味はない。 ソフト開発しても大変だから。
>>293 なるほどメニューはどうやっても自前のループ内では使えないのですね
ところでAPCって何ですか?
検索できない奴は猿以下だと思う
「APC Win32」とか思いつかん?
スレタイ読めない奴はミジンコ以下だと思う
じゃあスレタイを読める私は何者?
流れを読めない奴はどうみても精子です 本当にありがとうございました
>>288 猫サイトは参考にする分には良いが、あれで勉強しようと言うのは無謀。
CreateFont系以外にフォントを作成(もしくは指定)できるAPIとかありませんかね?
何がしたいからCreateFontじゃだめなの?
309 :
271 :2005/12/14(水) 10:09:34
こんな感じで希望していた動作に近くなりました。 HMENU hMenu = GetSystemMenu(hWnd, FALSE); MENUINFO mi; memset(&mi, 0x00, sizeof(mi)); mi.cbSize = sizeof(mi); mi.fMask = MIM_STYLE; GetMenuInfo(hMenu, &mi); mi.dwStyle |= MNS_MODELESS; SetMenuInfo(hMenu, &mi); ただこれだけだと タスクバーで右クリックされた時などに変な動作になります PeekMessageで受信しているのにこちらが把握している ウィンドウのWndProcに来ていないメッセージがあるので それらはメニューのWndProcで処理されているようですね このあたりを詳しく調べるともう少しちゃんとした動作にできるかもしれません
タイマやスレッドを使わない理由を知りたい
ヒント:使えない
>>306 ChooseFont, SystemParametersInfo + CreateFontIndirect
ってこと?
HSPみたいに、プログラム上で実行ファイルを作成させるにはどうすればいい?
exeを複製して、終端にデータを追記する。
WinINETについて質問です。 IEがオフラインモードの時には、なぜかInternetReadFileすると キャッシュを取得してしまうのですが、オフラインモードを オンラインモードに変更するAPIはありませんか? InternetGoOnlineのようにダイアログが出てユーザーに選択させる 形式でなく、こちらで強制的に変更する方法または、ダイアログ 自体をこちらで設定できるようなものを出来ればお願いします。
>>316 そんなものがあったらセキュリティ上問題があるとは思わないかい?
>>316 はアンチMSを叫ぶ自称・玄人になる素質がある。
生暖かく見守ってやれ、お前ら。
>>317 ( ゚д゚)ポカーン
IWebBrowser2::put_Offline()
InternetOpenの引数で設定できなかったっけ?
>>319 オマエに返すよ(゚д゚)っ「( ゚д゚)ポカーン」
322 逆切れはよくないね
プロセスハンドルから、そのプログラムのファイル名を得るにはどうすればいいのでしょうか? GetModuleFileName()かと思いましたが、常に失敗してしまいます。
GetModuleFileNameであってるが、GetModuleFileNameの引数はプロセスハンドルではない
327 :
デフォルトの名無しさん :2005/12/15(木) 00:36:15
>>259 ありがとう。それを元にやっていみます。
ありがとう。ありがとう。ありがとう。
>>324 HDDの肥やし発掘してみた
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID);
pEnumProcessModules(hProcess, &hModule, sizeof(hModule), NULL);
pGetModuleFileNameEx(hProcess, hModule, _exePath, sizeof(_exePath));
exePath = _exePath;
CloseHandle(hProcess);
>>328 ありがとうございます
psapi.hやlibやdllが見つからず苦労しましたがなんとかなりました
あと、自分が作ったプロセスIDのものしか見れないんでしょうか?
IEコンポーネントでスクリプトエラーが出た時にエラーダイアログを表示しないようにするにはどうしたらいいでしょうか?
質問です。 VisualStudio6.0でダイアログを作ってDialog()で表示しています。 このメインダイアログに、他に作ったサブダイアログを貼り付けたいのですが Dialog()は呼んだ瞬間にそこで処理が一旦止められてしまうので思っているものと違いますし、x,y座標が指定できないあたり私の用途では使わないものかと思われます。 どんなことがやりたいかというと、例えばメインダイアログでボタンを押すたびに、 対応したサブダイアログボックス(様々なエディットコントロールや、ボタンが張り付いているもの)をメインダイアログに貼り付けたいのです。 サブダイアログは境界線を「しない」にしているため、ユーザーからは「メインダイアログ上のボタンなど、再配置された」ように見えると思います。
すいません。自己解決しました。 CreateDialogを使うんですね。猫プロのダイアログ関係を読んでて見落としたようです。 もう一回確認したら発見できました。
333
>>331 んで、メインダイアログを移動したらどうなる?
>>334 (つД`)サブだけ動かないぃぃ
メインのWM_MOVEを捕まえて、サブの位置も移動させるようにしました。
普通のウインドウをメインダイアログにはっつけたのは、きちんとメインと一緒に移動してくれるのになぁ…。
>>336 すいません。直接貼り付けるというのは
・CreateDialog ではないAPIを使う
・VSのリソースエディタで、ダイアログにダイアログを貼り付ける方法がある
のどちらでしょうか。
Parent/Clientにするってことじゃないの?
素直にタブ使った方が良くね?
フレームを変えるだけ
ReBarを作ったのですが、ウィンドウをリサイズすると結構ちらつきます。 IEとかのReBarはあまりちらつきませんが、それはどうやるのですか?
Regionを駆使して必要な部分だけ書き換える
>>338 子供のダイアログのスタイルは「チャイルド」になってますし、
CreateDialogでも親ウインドウのHWND指定してるんですけどダメなんですよ。
座標系は、ちゃんと子供のそれになってるんですけど。
>>339 ゲームなのでタブはちょっと。
>>338 スタイルの「コントロール」を指定したら、うまく行きました。
VSでダイアログ編集はきつい(;´Д`)
ダイアログのことやってるんで便乗質問。 VCのダイアログ編集に普通のウインドウを貼り付けたいんだけど、どのコントロールですか? C#だとウインドウってのがあったような気がするけど、VCだと見つからない。 ピクチャーボックスはなんだか違いそうだし…
ゲームなら頑張って自前で描画するとか(ぉぃ
>>348 あんま知らないけど
C#って.netないと動かないんだろ?
CreateProcess,CreatePipeでコンソールアプリBを呼ぶWindowアプリAを作っています。 Bをコマンドプロンプトから呼ぶとき、 B options < data.dat こういう記述になります。 そのときにパスワードが必要な場合はコンソールから入力できます。 これをAから呼び出してパイプでデータを流した場合は、 入力に対して空でEnterを押したような挙動になってしまいます。 Bが入力不要になるオプションの場合は問題なく動いていますが、 入力が必要な場合にもうまく呼ぶ方法は無いものでしょうか?
>>350 素朴な疑問だが、 cat data.dat | B options とするとどうなるの?
#あ、catがないならtypeで。
352 :
デフォルトの名無しさん :2005/12/15(木) 16:57:41
以前ソースが公開されたDVDProjectをVC6Proでコンパイルしようとしてますが、 LINK : fatal error LNK1104: ファイル "libmmt.lib" を開けません。 というエラーが出ます。 プロジェクトの設定を見ても、ソースを全部検索しても、libmmt.libなる ものは見つけられません。 このような場合どうすればいいのでしょうか? お願いします。
>>352 スレ違い。
そのlibmmt.libはもしかしたらこれから生成しようとしているライブラリジャマイカ?
まさか、CDなどの書き込めないメディア上でコンパイルしようとはしてないだろうな。
コンソールウィンドウの表示 デバッグ時に引数の値などをチェックする時にMFCならTRACE、 Win32ならOutputDebugStringなどを使うでしょうが printfのような入出力関数を使いたい場合は コンソールウィンドウを表示すれば出来ます。 #include <io.h> #include <fcntl.h> void OpenConsole() { int hCrt, i; FILE *hf; AllocConsole(); hCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT); hf = _fdopen(hCrt, "w"); *stdout = *hf; i = setvbuf(stdout, NULL, _IONBF, 0); } 終了時に解放してください。 FreeConsole(); 結構重宝すると思います。
356 :
352 :2005/12/15(木) 17:11:38
すれ違いすいません。
>>353 プロジェクトは1つしかないので、これから生成するということはないと思います。
#include<windows.h> #include<stdio.h> intmain(int ac, char **av) { HANDLEhSTDIN; DWORDwfso; setvbuf(stdin, NULL, _IONBF, 0); hSTDIN = GetStdHandle(STD_INPUT_HANDLE); FlushConsoleInputBuffer(hSTDIN); wfso = WaitForSingleObject(hSTDIN, 3000); if(wfso == WAIT_OBJECT_0){ intkey = 0; DWORDbr; while(ReadFile(hSTDIN, &key, 1, &br, NULL)){ if(br){ printf("signal [%c][%08X]\n", key, key); } } }else{ printf("no signal\n"); } return0; }
>>356 libmmt.libでぐぐればでてくるけど、ICCが必要なんじゃないの?
>>351 それは同じ結果になります。
< でリダイレクトするのってわかりにくいですか?
360 :
デフォルトの名無しさん :2005/12/15(木) 17:43:36
あるイベントがシグナル状態になるのを待つには WaitForSingleObject() すればいいですが, 非シグナル状態になるのを待つ方法はありませんか?
361 :
351 :2005/12/15(木) 17:51:34
いや、標準入力以外からパスワードを入力しているんだろうなぁと思って確認したかっただけ。
#include<windows.h> #include<stdio.h> intmain(int ac, char **av) { HANDLEhSTDIN; DWORDwfso; setvbuf(stdin, NULL, _IONBF, 0); hSTDIN = GetStdHandle(STD_INPUT_HANDLE); FlushConsoleInputBuffer(hSTDIN); wfso = WaitForSingleObject(hSTDIN, 3000); if(wfso == WAIT_OBJECT_0){ while(!feof(stdin)){ intkey = fgetc(stdin); printf("signal [%c][%08X]\n", key, key); } }else{ printf("no signal\n"); } return0; }
#include<windows.h> #include<stdio.h> intmain(int ac, char **av) { HANDLEhSTDIN; DWORDwfso; setvbuf(stdin, NULL, _IONBF, 0); hSTDIN = GetStdHandle(STD_INPUT_HANDLE); FlushConsoleInputBuffer(hSTDIN); wfso = WaitForSingleObject(hSTDIN, 3000); if(wfso == WAIT_OBJECT_0){ INPUT_RECORDir; DWORDer; while(ReadConsoleInput(hSTDIN, &ir, 1, &er)){ if(er && (ir.EventType == KEY_EVENT)){ KEY_EVENT_RECORDker = ir.Event.KeyEvent; printf("signal [%08X][%08X]\n", ker.wVirtualKeyCode, ker.wVirtualScanCode); } } }else{ printf("no signal\n"); } return0; }
>360 while(signal){ Sleep(100); }
教えて頂きたいことがあります GetAsyncKeyState('Y') や GetAsyncKeyState(VK_LSHIFT) などはうまくいくのですが GetAsyncKeyState(VK_SEMICOLON) や GetAsyncKeyState(VK_COMMA) では 「定義されていない識別子」とエラーが出ます。 「;」 「,」を表現する方法は他にありますか。
とりあえずWINUSER.hくらいはみてもバチ当たらんぞ。 VK_OEM_1 0xBA // ';:' for US VK_OEM_PLUS 0xBB // '+' any country VK_OEM_COMMA 0xBC // ',' any country VK_OEM_MINUS 0xBD // '-' any country VK_OEM_PERIOD 0xBE // '.' any country VK_OEM_2 0xBF // '/?' for US VK_OEM_3 0xC0 // '`~' for US VK_OEM_4 0xDB // '[{' for US VK_OEM_5 0xDC // '\|' for US VK_OEM_6 0xDD // ']}' for US VK_OEM_7 0xDE // ''"' for US
あれ・・・ 「,」のばあい 0xBC で行けるのですが 「;」のばあい 0xBAでだめです・・・ どうすればいいのでしょうか・・・ 教えてくんになってしまい申し訳ないです。
かいけつしました。 「;」の場合は 0xBB のようですね。 どうもありがとうございました。
それらのキーは、他の言語のキーボードではシフトコードだったりするので注意
371 :
350 :2005/12/15(木) 22:10:50
>>361 そこがよくわからないところで、
type data.dat | B options
だろうと、
B options < data.dat
だろうと、
パスワード入力で止まったらコンソールから入力できました。
せめて、Bが入力待ちになったらAからそこに入力できれば良いんですけどね。
あらかじめ流すデータじゃなくて。
だからこそfor USなどと書かれているわけだが。
373 :
デフォルトの名無しさん :2005/12/15(木) 22:26:31
初心者的質問で申し訳ないのですが、ご教授下さると助かります。 複数行対応エディットボックスに文字をセットした時の問題です。 HWND hEdit; char str[64]="123\n456"; hEdit = CreateWindow("EDIT",NULL,〜中略〜, NULL); SendMessage(hEdit,WM_SETTEXT,0, (LPARAM) str); MessageBox(NULL,str,"test",MB_OK); このようにするとメッセージボックスでは 123 456 と改行されて表示されますが、エディットボックスには改行\n(0D0A)が(0A)となってしまい改行されません。 何が悪いのでしょうか?
>>373 '\n'はlfのみです。きちんと"\r\n"としましょう。
#メッセージボックスが改行する理由? 知るかい。
IEコンポーネントでスクリプトエラーが出た時にエラーダイアログを表示しないようにするにはどうしたらいいでしょうか?
Donutのソースを読む
ReadMe や Help に このソフトウェアが表示するエラーダイアログは馬鹿な人にしか見えません。 と記しておく。
Bread and Butter みたいなもん?
380 :
373 :2005/12/16(金) 00:04:17
>>374-375 ありがとうございます。おかげさまで解決いたしました。
メッセージボックスでは改行されている理由は・・・・調べてみましたがよくわかりません。
ファイルをテキストモードで開く、バイナリモードで開くといった時、LFが自動的にCR+LFに変換されるのような仕様でしょうか?
きっと私がprintfでCarriage Returnなしでも大丈夫なコンパイラに毒されているんですね。
>>380 いや、「printfは\nで改行する」は正しい。
> ファイルを…
これは正しい。
>>371 パスワードはUIから入れないとアカン場合があるみたいですよね。
方法はあるのかもしれないけど。
runas で気づいたんだったかな。
関係あるかどうかわからないけど、
CredUICmdLinePromptForCredentials とかいう長い名前の
関数もあるみたいで。
>>372 MapVirtualKeyを使えでFA?
過去ログでこんなのあった
参考リンク
http://www.geocities.jp/monalipse/c/api/Console.html のやり方で自分でコンソールとやり取りするのは大変・・・なのでよかったらこれドゾー
// MapVirtualKey用
#include <windows.h>
// getch or getche用
#include <conio.h>
int my_getch(void)
{
unsigned char c = _getch();
if(c != 0 && c != 0xe0) return -1;
c = _getch();
return (int)::MapVirtualKey((UINT)c, 1);
}
getchがスキャンコードを返してきたときだけ仮想キーコードにして返す関数でつ。
普通の'a'とか'1'なんかだと-1が返ってきまつ。
ちなみに矢印キーとかの仮想キーコードはこれ。
VK_PRIOR(PageUp) -> 0x21
VK_NEXT(PageDown) -> 0x22
VK_END -> 0x23
VK_HOME -> 0x24
VK_LEFT -> 0x25
VK_UP -> 0x26
VK_RIGHT -> 0x27
VK_DOWN -> 0x28
あと、MapVirtualKeyはuser32.dllに入ってるのでuser32.libのリンクをお忘れなく。
VC使ってるならこんな感じ。他はシラネ。
cl test.cpp -link user32.lib
これならWinAPIのMapVirtualKey一つ使うだけなんでAllocConsole系よりかはまだ使いやすいかと。
385 :
376 :2005/12/16(金) 07:37:54
>>377-378 ウィンドウフックをすることで解決しました
本当にどうもありがとうございました
誰かたすけてください。 プログラミングしていて気づいたのですが、 メディアプレイヤーをつけているときと、つけていないときでFPSが違います。 WindowsMediaPlayerを起動していると、動作が「速く」なり、起動していない場合重くなります。 いったい何が原因なのか分かりません。
測定方法に問題あり
388 :
デフォルトの名無しさん :2005/12/16(金) 09:50:51
すみません、分からないことがあるので教えてください。 自作でDLLを作っているのですが、DLLにはDLLMainというエントリポイントが 必要ですよね?複数のDLLを作ってリンクする場合、DLLMainという関数が複数 同時に使われることになると思うのですが大丈夫なのでしょうか? よろしくお願いします。
久しぶりのAdvancedWindows嫁。
>>384 すごい参考になりました。 m(_ _)mぺこ
392 :
デフォルトの名無しさん :2005/12/16(金) 12:00:35
MSDNみてて、ふと思ったのだが・・・ BOOL値を返すAPIの戻り値の説明・・・ BOOLといいつつ、 「関数が成功すると、0 以外の値が返ります。」 ってよくかいてあるじゃん、 それって booleanじゃなくねぇか? if (戻り値 == TRUE) は、まずい可能性ってことだよね
>>392 今さら何言ってんだ?
いちいちhoge()==TRUEやhoge()==FALSEで評価する人はおらんでしょ。
普通は、hoge() もしくは、!hoge()で評価する。
あ、それ、同じ個と思った。
395 :
394 :2005/12/16(金) 12:10:36
エラーコードをレジスタ渡しにする旧人類にとっと 成功≠0 失敗=0 っつのはいかにも使いにくいね
>>392 GetMessageの説明呼んでみな
びっくりするぞ。
俺はtypedef BOOL MSBoolってして
こいつはbool値として扱わないことにしてる。
おまいらアフォかw Cのboolは0と0以外だろ
実は #define TRUE 1 #define FALSE 0 じゃなくて #define FALSE 0 #define TRUE (!FALSE) と定義されている
>>399 マジで?
漏れのwindef.hには、
#define TRUE 1
と定義されてるんだが・・・
401 :
デフォルトの名無しさん :2005/12/16(金) 13:38:39
私も400さんと同じ (゚Д゚)ハッ 釣りだったのか
402 :
デフォルトの名無しさん :2005/12/16(金) 13:39:46
afx.hには、ビシッと // Standard constants #undef FALSE #undef TRUE #undef NULL #define FALSE 0 #define TRUE 1 #define NULL 0 ってなってた。
403 :
デフォルトの名無しさん :2005/12/16(金) 13:50:23
てか、intでええやんと思うのだが どうせやるなら、 typedef enum { TRUE = 0, FALSE = 1 } BOOL; BOOL hogehoge() { return FALSE; } じゃない?ま、どーでもいいけど まぁ、昔からそーやってるからとか、なんとなくって理由で今の仕様なんだろうけど
>>403 サイズが変わる可能性があるから、保守的になるんだよ。
sizeof(int) == 4と決め付けている奴とかな。
あと、そのCのenum、実際に何バイトなのかは、コンパイラの実装依存じゃないか。
406 :
デフォルトの名無しさん :2005/12/16(金) 15:06:16
>>404 昔のILP16かなんかのときの名残かな?
XP64bitってLLP64だったっけ?忘れた・・・
ところで、教えて君なんですが、
PostThreadMessageって、自分とは別のプロセスのおスレッドに
メッセージを遅れますか?
可能なら、その、送りたい別のプロセスのスレッド識別子って
どうやって取得するの?
>>406 送れる。
例えばCreateProcess()したときのPROCESS_INFORMATIONに入っている
dwThreadIdを使ってもいいし、その「おスレッド」にメッセージか何かで教えてもらってもいい。
408 :
デフォルトの名無しさん :2005/12/16(金) 16:00:23
2つのスレッドを走らせていて 片方であるイベントを WaitForSingleObject() でまたせておいて 他方でそのイベントを SetEvent() して 同期させるような処理を書いたのですが, そのプログラムを起動して 常にではないですが半々くらいの割合で SetEvent() しても Wait 関数が値を返さずに 処理がつまってしまうケースがあります なぜこのようなことが起こるのでしょうか? こうならないようにするにはどうしたらいいのでしょうか?
ツールバーの小さいボタンのビットマップの 縦サイズのデフォルトは15だったのか。 ずっと16だと思っていた。
Win32APIのシステムを学ぼうとしているのですが、どの参考書を選べば良いか悩んでいます。 一応今は、赤坂玲音著の「Windowsゲームプログラミング」という本は持っています。 なにか良い書籍がありましたら紹介よろしくお願いします。
プログラミングWindows Advanced Windows
>>408 勘で書くと、
各々のスレッドの処理の進み具合によって、
WaitForSingleObjectの前にSetEventが呼ばれる状況になってる。
414 :
386 :2005/12/16(金) 16:35:38
測定方法は関係ないと思います。 目に見えて差があるので。(メディアプレイヤーを消すと倍ぐらい重くなる)
>>412 ありがとうございます。そのとおり試してみました。DLLにそれぞれ1つずつ
DLLMainを置いて、2つ同時にリンクしましたがちゃんと動作しています。
DllMainは特別なんですかね。
>>389 AdvancedWindowsも読んでみたいんですが、以前、プログラミングWindows
という本をよんで挫折してしまったので、同じ系列のこの本も挫折しそうなので
他の本を探してみます。どうもありがとうございました。
猫でも分かる
>>417 DllMainだけが特別ではない。
どんな関数でもなんでもそうだよ。
DLL自身の中で唯一の名前であれば問題ない。
>>419 Book.dll と、Note.dll があってその両方に drawCircle()という同じ名前で
処理内容の違う関数があって、この2つのDLLを本体(EXE)にリンク
した場合、呼び出すときに区別できなくないでしょうか?
何かDLLについて(私が)根本的に分かってないみたい。
もっと本を読まないといけないですね。
別に関数名が関数のアイデンティティの全てじゃないからな
引数とかな
>>420 たしかにその2つを普通に同一のプログラムから同時に使用しようとしたらエラーになるが、
DEFファイルなんかを使ってそれぞれ別の名前を与えられるし、
動的リンクならDLLのファイル名と関数名(あるいは序数)から
直に関数へのポインタが得る方法もある。
410へのレスありがとうございましたm( _ _ )mペコリ
プログラミングWindows第5版(上) を買おうと決めたのですが、最初に読む著書として選んでも大丈夫でしょうか?皆さんよろしくお願いします。
あいおい
そんぽ
>>426 C,C++をある程度理解していればOKかと。
この手の本はとにかく何か1冊買って、次に買う本がどういうモノが良いのか分かってくる。
でも、買った本は無駄になることはない。
>>355 今さらだが、そんな面倒なことしなくても、
AllocConsole();
freopen("CONOUT$", "r", stdout);
で使えたような
433 :
デフォルトの名無しさん :2005/12/17(土) 12:10:28
ボタンの消し方を教えてください。 文字の変え方は、SetWindowText、 絵の変え方は、SendMessage(BM_SETIMAGE) と分かったのですが、消し方が分かりません。
ボタンもウインドウ
PostMessage(WM_Quit)
>>434 >>435 ああ、そうですよね。
DeleteWindowとか探していました。
ありがとうございました。
一時的に消すだけなら ShowWindow(SW_HIDE); がいいよ。 ShowWindow(SW_SHOW); で復活できるし。 QUITしちゃったらまた作り直さないといけないお
438 :
デフォルトの名無しさん :2005/12/17(土) 14:02:50
>>407 レスありがと。
でも、そのgetMessageで待ってる「おスレッド(w」様に
メッセージを送りたいわけで・・・
にわとりが先かたまごが先かの状態になっちゃう
スレッドIDって自分で明示的に指定できる?
べつにpostThreadMessageでなくてもいいんで
なんかいい方法ないかなぁ?
>>438 1. プロセスを列挙して、目的のプロセスを見つける
2. そのプロセスのスレッドを列挙して、目的のスレッドを見つける。
3. 送る。
というか、そのメッセージを受け取る側のプロセスも自分で書くのなら、
もっと別の方法で通信したほうがいいと思うんだが。
質問させてもらいます 最近Windowsプログラミングの勉強を始めたものです 今までコンソールアプリで動かしていたものをWin32アプリに移植したのですが 今までと比べてかなり処理時間が長くなってしまいました 移植に当たっては、ほとんどソースは弄らずにスレッドを一個作ってそこに放り込んでいます 手を加えた部分は、動的メモリ確保にしたことと 一定処理ごとにウィンドウプロシージャにメッセージを送りウィンドウに計算推移を描画させているのみです 同じ計算をさせてみると コンソールアプリ 12分 Win32アプリ 2時間 とこれぐらい差が出てしまいますorz 普通こんなにも差が出てしまうものなのでしょうか?
一定処理ごとってどのくらいよ? タイマ使ってn秒単位でメッセージ送るようにして見たら? フォアグラウンドスレッドが他の操作が何も出来なくなるくらいのタイミングで描画やってるんなら 問題だしね。 というかソースどっかにアップロードするのが確実かもね。 コンソールで12分もかかる演算ってなんなんだろうとも思ったり。
>>440 > 動的メモリ確保
サイズに依るがこれがネックになりうるぞ
443 :
352 :2005/12/17(土) 14:36:20
自分の固定IPアドレスを変更する方法がありましたら、 教えてください。 お願いします。
libmmtはIntelコンパイラ謹製の数値計算用ライブラリだ。持ってないならあきらめろ。
レスありがとうございます 一応操作は可能です 演算内容はECGAという進化計算アルゴリズムの一種です 一定処理ごと、というのはこのECGA演算過程でいくつかの段階に分かれているのですが その区切りごとに送っています また、演算の遅延はその段階のうちの一つで起きていてそこから先に進まないので かなりの間(数分〜十数分)メッセージによる描画は発生しません 演算規模をできるだけ小さくして各段階での処理速度が数瞬終わる場合でも大丈夫なのでそこは問題ないと思います やはり、ソースを上げたほうが確実ですか かなり拙いので上げるのはすごいはずかしいですね・・・
>>442 そうなのですか・・・
ネックになる部分は領域を確保するときの作業のときでしょうか?
447 :
443 :2005/12/17(土) 14:58:21
>>444 ありがとうございます。libmmtの件は、リンカの指定で「無視するライブラリ」に指定したら、
リンクできました。
もっとも、libmmtはデフォルトライブラリのようで、それにもかかわらずそれが存在しない
というのはなんでなのかわかんないんですが。。。
あと
>>443 もお願いします。TCPIPのプロパティからIPアドレス変えられますが、
プログラムでできる方法について、です。
>>447 ICCでコンパイルされた.objでデフォルトライブラリに指定されてるから。
450 :
443 :2005/12/17(土) 17:33:45
>>449 やっと意味がわかりました。
ありがとう。
どういたしまして。
プロセス隠匿方法に関してです。 例えばタスクマネージャでプロセス一覧を表示しますと、 とあるアプリケーションのスレッドが動いてるにも関わらず該当プロセスが表示されていません。 これはどの様な仕組みで隠匿してるのでしょうか? 仕組みだけでも教えていただけたら幸いです..
通報しますた
ダイログ、dilogでぐぐると結構ヒットする。orz
>>455-457 ううん、危なげな質問でしたが答えてくれて有難うございます。
いろいろキーワードから調べて見ます
うぎゃ。あが抜けてたorz
海外アプリケーションのローカライズをしているのですが 日本語入力ができなくて困っています。 入力言語を変更するAPI等ありましたら、教えていただけないでしょうか?
キーボードレイアウトの変更でできなくね?
463 :
デフォルトの名無しさん :2005/12/18(日) 22:51:25
質問です。Windows XP上でプログラミングをしていて、ファイルオープンダイアログ、 すなわちGetOpenFileName()を呼ぼうとしているのですが、OPENFILENAME構造体に渡す パラメータは全く同じなのに、次の点で普段と動作が異なることがあります。 ・「ファイル名(N):」に表示されるキャレットが点滅しないことがある。 ・マウスカーソルをファイルの上に移動させてもツールチップが表示されないことがある。 どうやらこれらの現象は同時に発生するようです。どのような原因が考えられるでしょうか?
464 :
463 :2005/12/18(日) 23:33:03
すみません、自己解決しました。 メインのウィンドウプロシージャの中でWM_PAINTを正しく 処理していなかったのが原因でした。_| ̄|○
あるあるwwww こういう時こそ、MFCやWTLの雛形の存在意義を感じたりする。
466 :
デフォルトの名無しさん :2005/12/19(月) 09:23:05
>>439 なるほど、自分で探すしかないのか・・
スレッドの探し方で、ちょっと悩んでみまつ
ぜひ、別の方法とやらのヒントでもご教示を
(getMessageで待ってるのは、ServiceMainで、
ウィンドウオブジェクトとかは持って無い奴です。)
>>466 ・待つプロセスが自分のThreadIDを固定ファイルか何かに書いておく。
・待つプロセスが特定の名前の空ウィンドウを作りFindWindow()で探してもらう。
・待つプロセスが特定の名前の共有メモリ化何かを確保し、そこにアクセスしてもらう。
468 :
デフォルトの名無しさん :2005/12/19(月) 10:06:45
>>467 >・待つプロセスが自分のThreadIDを固定ファイルか何かに書いておく。
この案がいいかな
Unix系だと、 /var/run/httpd.pid
とか置いといて、pid指定してsignalでホイホイするイメージに近いかねぇ〜
置き場所は、レジストリがいい?
HKEY_LOCAL_MACHINE\SOFTWARE\ほげほげ\ThreadID
ちょい、やってみますです。
469 :
デフォルトの名無しさん :2005/12/19(月) 10:25:38
NTFSのMFTのサイズを取得するためにNtFsControlFile APIで NTFS_VOLUME_DATA_BUFFER構造体を取得しています。 ただこの処理は管理者権限のあるアカウントでしか成功しない ということに最近気づいてしまい困っています。 ドライブへのアクセス権限のある一般ユーザ権限レベルでも MFTのサイズを取得する方法はないでしょうか?
470 :
469 :2005/12/19(月) 11:34:23
管理権限なしでMFTサイズを取得するにはセクターに直接アクセスして読むしか なさそうな気がしてきました。 NTFSでセクターアクセスする方法ってどこかに解説ページとかないでしょうか? DOS版は作ったことあるんですけど。
>>470 CreateFile()で\\.\cだかをオープンするんじゃなかったかな。
MSDN参照で。
#MFTサイズがどこから読めるのか私は知らんが。
472 :
469 :2005/12/19(月) 11:49:11
>>471 今はこの方法で実装していますが、この部分で管理者権限が必要になるんです。
デフォルトのフォント(HFONTかフォント名)を取得する関数あります?
474 :
473 :2005/12/19(月) 17:26:12
デフォルトっていうのは、 システムの標準フォントでおねがいします
>>474 メニュー描画等で使われているフォント
HFONT hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
いわえるシステムフォント
HFONT hFont = (HFONT)GetStockObject(SYSTEM_FONT);
名前とか大きさとかほしけりゃ その後に
LOGFONT lf;
GetObject(hFont, sizeof(lf), &lf);
とでもやってくれ
ありがとう><
>>475 > いわえる
> いわえる
> いわえる
> いわえる
> いわえる
> いわえる
> いわえる
> いわえる
> いわえる
> いわえる
> いわえる
> いわえる
> いわえる
いわ・える(いはへる)【岩得る】 〔他ア下一(ハ下一)〕卆いは・ふ〔他ハ下二〕(しばくために)岩を入手する。 *書言字考節用集‐九「紲絆イハヘル束縛之義。〔毛詩〕」
479 :
468 :2005/12/19(月) 19:02:17
とあるプロセスで、 DWORD tid = GetCurrentThreadId(); (tidを表示すると2156) MSG msg; BOOL bRet; while ((bRet = GetMessage(&msg, NULL, 0, 0))) { : ってコーディングして待ってるんだけど、 これを、別のプロセスで、↓なぐあいで起動したんだけど、 DWORD tid = 2156; UINT msg = 10; WPARAM prm1 = 9; LPARAM prm2 = 8; rtn = ::PostThreadMessage(tid, msg, prm1, prm2); rtnがFALSEでGetLastErrorの内容は「スレッド識別子が無効です」でした。なんで?
IDとHANDLEを間違ってない?
PostThreadMessage idThread スレッドの識別子を指定します。 この関数は、このスレッドのメッセージキューへメッセージをポストします。 指定されたスレッドがメッセージキューを備えていない場合、この関数は失敗します。 スレッドが Win32 のユーザー関数または GDI 関数のいずれかを最初に呼び出した時点で、 システムはそのスレッドのメッセージキューを作成します。 詳細については、この関数の「解説」を参照してください。 Windows 2000:このスレッドは、呼び出し側と同じデスクトップ、 または共通の LUID(Locally Unique Identifiier;ローカル一意識別子) を持つプロセスに所属していなければなりません。それ以外の場合、 この関数は失敗し、ERROR_INVALID_THREAD_ID を返します。
482 :
デフォルトの名無しさん :2005/12/19(月) 19:42:24
>>481 GetMessageしてるほうは、ServiceMainだから、デスクトップ持って無いし、
共通のLUIDたぶん持ってないです。
ダメダメだった。どうすりゃええんだ〜
パイプとかソケット使った方がよくね?
メールスロットとかな。 なんでPostThreadMessageにこだわるかね。
自己解決しました。
ControlService が128以降、ユーザに開放されてたのに気がついた。
これで起動して、イベントハンドラで、自分自身のプロセス?にPostThreadMessageしたら、
ちゃんと、キューにイベントが溜まって、1個ずつ取り出してできたよ。
>>483-484 コメントありがとう〜
メールスロットやパイプ、ソケットの件は、いろいろあって
それ以外の方法でさがしてたもので・・
え?Inner-Process-Comminucationだったの?
487 :
デフォルトの名無しさん :2005/12/19(月) 21:07:04
ウィンドウの縁の枠の太さ、ツールバーの幅とか、 windows.hとかにマクロされていましたら、教えてください。 GetClientRectでも出来そうな気もしますが、 始めにウィンドウを作る時にサイズが分かりたいので、 定数で予めあってくれるとやりやすいと思いました。
その価は動的なので、「マクロされ」てはいない。
定数じゃなくてユーザが設定するもんだろ GetSystemMetrics
>>486 ControlServiceをcallするのは、別のプロセスです。
プロセス間通信です。
>>487 逆方向?のAPIあるよ。
AdjustWindowRect(Ex) クライアントサイズを指定してWindowサイズを求める
(とはいえ メニューが複数行にまたぐときの結果はおかしい?)
492 :
487 :2005/12/19(月) 21:52:58
みなさま、ありがとうございます。 教えていただいたキーワードを試してみたいと思います。
恐ろしく初心者な質問だと思うんだけど、 調べてても分からなくなったので質問させて下さい。 あるプロセスから、イベントを1つ名前付きでCreateEventしておいた。 そのプロセスから CreateProcess で別の子プロセスを起動。 子プロセスは親プロセスから終了させるんだけど、 子プロセスの終了前にクリーンアップ処理を入れたいんで、 親プロセスで、最初に作っておいたイベントをセットする。 子プロセスでそれを拾ってクリーンアップしてからイベントをセットし返す。 親プロセスは子プロセスのクリーンアップが終わってから、 子プロセスを終わらせる。 みたいに書いてたんだけど、親プロセスで SetEvent しても 子プロセスで WaitForSingleObject が拾ってくれない orz なんかうまくないところありますか? (やり方そのものがうまくないんだけどいろいろ制約があって・・・) セキュリティと継承?かなと思ってるんだけど、 リファレンスを見ても意味が良く分かんなくて。 長文スマソ
>>493 親は子にWM_CLOSEを投げて、子の終了を待つ。
子はWM_CLOSEを受信したら終了すればいいだけじゃないの?
495 :
493 :2005/12/19(月) 23:12:34
>>494 レスありがとさんです。
子はウィンドウハンドルを持ってない単純なプロセスなので
そっち経由だとやり取りできないんです(ノ∀`)
>>493 基本的には問題なさそうだから、
> 子プロセスで WaitForSingleObject が拾ってくれない
の動作の詳細(どうなってほしいが、実際にはどう動く)が知りたいところ。
ちなみに子プロセスの終了検出は、子プロセスを普通に終了させて、
親プロセスでは子プロセスHANDLEをWaitForSingleObject()するほうが素直。
あるディレクトリが共有ディスクかどうか判別したいのですが、 専用のAPIとかってありますでしょうか? それともパスが\\か//で始まっていかどうかで判別するのが普通でしょうか。 どなたかよきアドバイスを。
499 :
493 :2005/12/19(月) 23:45:27
>>496 ありがとうございます。
今、主要なところを抜き出してプロジェクト作ってます。
詳細が分かりにくいのでもうちょっと書きます。
>> 子プロセスで WaitForSingleObject が拾ってくれない
>の動作の詳細(どうなってほしいが、実際にはどう動く)が知りたいところ。
親から子を CreateProcess してます。
親でイベントを2つ CreateEvent して、1つは子を終了させるときに SetEvent します。
そのあと親ではもう1つのイベントを WaitFor してます。
子の方では、起動時に、親で CreateEvent したのと同じ名前で OpenEvent してます。
その後、メインスレッドのループで WaitFor(タイムアウト0) していて、
親からプロセス終了のイベントがセットされるのを調べてます。(★ここでイベントがシグナルだと分かってくれない)
もしイベントが検知できたら、ゴミ掃除をしてからもう1つのイベントを SetEvent します。
親ではもう1つのイベントの方の WaitFor が検知できるはずなので、
その後、子をTerminateProcess してます。
>ちなみに子プロセスの終了検出は、子プロセスを普通に終了させて、
>親プロセスでは子プロセスHANDLEをWaitForSingleObject()するほうが素直。
はい、そうなんですよね。。。
ただスレッドとかその他グローバルに確保してるリソースを解放しないといけないので
『プロセスが終わる直前』を通知したいんです。
>>499 んー・・・。
・実は親子で同じイベントをWaitし合ってる
・イベントが自動Eventで、複数の子プロセスをCreateしている
くらいしか思いつかないな。
自動Eventの場合、Setした時に起きるスレッドは1つだけなので、
他にもWaitしてるスレッドがあっても、それらは寝たまま。
手動Eventなら待ってる全スレッドが一気に起きるんだけど。
>その後、子をTerminateProcess してます。 え?なんで、WaitForで子供が死ぬのを待たなずに強制終了しちゃうの? >ただスレッドとかその他グローバルに確保してるリソースを解放しないといけない その「確保しているリソース」ってのは子が「死にそう」〜「死んだ」までに 始末しないとイケナイような際どいものなの?Win32にそんなリソースあったけ?
>>499 >子をTerminateProcess してます
工工エエエ(´д`)エエエ工工
>>504 スレッドを終了させるわけではないので、OSによるリソース解放を期待できるよ。
COM参照数?
知らんよ。デスクトップPCでそんなもん気にすんな。
数十日間連続稼動させるサーバーじゃねーんだ。
普通に、終わるのまてんのか!
TerminateProcessなんか普通使ったら駄目だろ エラーが起きてるときとかにだけ使うべき
509 :
493 :2005/12/20(火) 00:54:50
>>500 やっぱりそれくらいですよね・・・
Waitしているのは1つの子プロセスのメインスレッドだけなので
たぶん抜けてはいないと思う。
>>502 大丈夫だと思うんだけどなぁ・・・
念のためもうちょい見直します。
>>503-507 子供が死ぬのを「待ちすぎるとよろしくない」使用上の制限があって・・・
特殊な制御系で動かそうって話なんです。
子が大量にmallocしてたりゴミがいろいろあって、
強制終了するにもとりあえずそっちは片付けてからにしろ、ってなことで。
>普通に、終わるまでまてんのか!
待てないんす〜俺も待ちたいんだけど
※愚痴ってしまうと、引継ぎの保守なんで大きく直すにも直せない(ノ∀`)
>>509 そんな不毛な処理するな。
そもそも、待ちすぎると言う考えが既に間違い。
もっと素直な方法が存在する。
>>509 強制終了するからゴミが残る。
普通に終了すればゴミも残らない。
それより、子プロセスの結果を別のプロセス間通信で行い、
結果を受け取った後は、親はノータッチでいいだろ。
よく論理がわからないなぁ。 ・子を強制終了させたい->問答無用。TerminateProcessで殺す。 ・子を終了させたい->イベントをsetして、子が終了するまで待つ。 の二択だとおもうのだが。 ・子を強制終了させたいけど、終了処理もさせたい->え?終了処理に反応するなら なんで強制終了させる必要があるの? >子が大量にmallocしてたり に至ってはmalloc&freeを再燃させようとする陰謀だし
CEプログラミングスレではTerminateThread このスレではTerminateProcess 今日はTerminate系で無理やり殺すのがはやってるのか?
SetEventが終わったあと子は何してんだよ。
子供の別スレッドでも待ってるんじゃね?
>>511 は、小さなゴミを出すことよりも、デッドロックで2つのプロセス全体がゴミになることを選ぶ馬鹿。
典型的な荒らし。
519 :
デフォルトの名無しさん :2005/12/20(火) 11:27:08
FormatMessageのMSDNのサンプルって、無条件に バッファの開放をしてるけど、いいの? LocalFreeが、アドレスチェックしてるみたいだから、 エラーになろうが、つっぱしるのが流儀?
iniファイルの書き込みについて。 int x = 1; TCHAR data[256]; wsprintf(data, "x = %d", x); WritePrivateProfileSection("section", data, path); としているんだけど、 [section] x = 1 フフフフフフフフ…(注:本当は半角のフ) となっちゃう。フフフフフ…が書き込まれない方法を教えて。
522 :
520 :2005/12/20(火) 11:47:06
リリースビルドしたら消えた。不思議ですねえ。 とにかくどうも。
>>520 試してないけど、↓でいいんじゃね?
wsprintf(data, "x = %d\0", x);
524 :
520 :2005/12/20(火) 11:53:01
>>520 >TCHAR data[256];
TCHAR data[256] = {0};
'\0'をも一つ付けなきゃいかんのだろ。 int len = wsprintf(data, "x = %d", x); data[len+1] = '\0';
MSDN読めばわかるけど。 x = 1\0y = 2\0\0 みたいなデータを渡すんだよ。だから、最後に\0を付加する必要がある。 wsprintf(data, "x = %d%c", x, 0);
530 :
520 :2005/12/20(火) 12:19:27
色々とありがとうです。 dataの最後は\0が2つ並んでないといけないということだけど、 526のやり方が正しいみたい。525でもいいけど。 523のやり方だとdata[5] = -52となってました。
531 :
528 :2005/12/20(火) 12:19:32
""内に\0書いても、\0入れたいのか終端なのか区別できないだろ。
bmpファイルの読み込みで、 普通RGBTRIPLE構造体で動的にメモリ確保して色情報をReadFile関数で読むのですが、 32ビットビットマップ用(?)のRGBQUAD構造体とははなんなんでしょうか・・・ こいつのメンバーは RGBTRIPLE構造体のメンバ(BYTE rgbBlue, BYTE rgbGreen, BYTE rgbRed)に加え 新しいメンバBYTE rgbReservedというのが宣言されているようです。 現在このメンバの部分には0を格納しなければいけないようですが、いわゆる予約って奴でしょうか
>>533 皆、書籍やMSDNをお前の代わりに読んでやるほど暇じゃないんだ。出直せ。
Reserved 読めますか?
すみませんでしたorz
書きかけで飯食っていたらレスがいっぱい付いていたが
せっかくなので書いておく。
>>520 そのAPIは複数のキーを1回の呼び出しで出力するためのもの。
各キーはNULLで区切られていて、最後は終わりを表すために
もう1つNULLを付ける必要がある。
A=1\0B=2\0C=3\0\0
というデータを渡すと
A=1
B=2
C=3
と出力される。
フフフフと出力されるのは、VC++のデバッグビルドでは
未初期化のローカル変数が0xCCで初期化されているため。
これを覚えておくとデバッグが楽になる。
キーを1つだけ出力したい場合は、WritePrivateProfileSectionではなくて
WritePrivateProfileStringを使うのが普通。
フフフフ
デバッグビルド、リリースビルドの話じゃなくて、素直にZeroMemoryすれ。 って話は?
>>540 いいえ、そんな安直なプログラミングはすべきではありません。
末尾にナル文字を一つ余計に附加するのが常道です。
#つーか、>538なんだがな。
>>540 それはたまたまうまく動くだけ。
規格通りのコーディングならきちんと2コ付けるべき。
MSDNライブラリのLPSTRやらHWNDの定義みたいなのが載ってるページが見つからないんですが どの項目でしたっけ?;
msdn.microsoft.com/library/en-us/winprog/winprog/windows_data_types.asp のことか?
>544 それですthx
>>519 FORMAT_MESSAGE_ALLOCATE_BUFFER
>>538 横ですが勉強になりました
#今日までヌルと呼んでいた私は釣ってきます
>>547 別にヌルでもいいよ。>541が教条主義なだけだから。
もうフフフフも怖くないぞ
ラミパスラミパスフフフフフ
int a = フフフフ;
自分以外が作ったチャットソフトの、ログ部分のテキストを取得しようとしています。しかし取得できません。 どなたか助言をお願いいたします。 親(チャットソフト) -子1(クラス名=Edit) (ウインドウキャプション=””) チャットメッセージ入力用Editコントロール -子2(クラス名=Static) (ウインドウキャプション=”InputDisableWindow”) チャットのログ表示 ***1 Editのテキストはウインドウキャプションがないため、SendMessage-WM_GETTEXTだけではなく GetWindowTextでも取得できました。 MSDNには「他のプロセス内のコントロールのテキストを取得するには、GetWindowText 関数を呼び出す のではなく、直接 WM_GETTEXT メッセージを送ります。」と書いてあります。 ***2 チャットログが表示されるStaticのほうはSendMessage(HWND ,WM_GETTEXT,〜 で送ると ウインドウキャプションであるInputDis〜を取得してしまいます。 ステータスバーのようにSB_GETTEXTのような専用メッセージがあるのでしょうか? それとも根本的に間違った考えなのでしょうか?
>>552 Static をベースにサブクラス化してるんじゃないの?
WindowText とは無関係なデータを保持してて、それを表示してる気配がプンプンするのだが…
その 子2 をターゲットに spy++ で WM_USER + マジックナンバー を探ってみるとか?
554 :
552 :2005/12/20(火) 23:28:50
アドバイスありがとうございます サブクラス化について調べて、テストしてみます
555 :
デフォルトの名無しさん :2005/12/20(火) 23:58:53
スレ違いなところに書き込んたため、ここで質問させていただきます。 UnicodeのウィンドウにIMEを使って文字を入力する時、 入力された文字をWM_IME_COMPOSITIONやWM_IME_CHARを使わずにWM_CHARで正確に 文字が取得できますでしょうか?? ちなみにOSはWindows2000です。XPだと取れるっぽいのですが、Windows2000だと 私の環境だと、とれないっぽいのですが、みなさんいかがでしょうか?? つまり、WM_CHARメッセージのWParamがおかしいんです。
>>554 もう1点。
Static コントロールのスタイルに オーナードロー(SS_OWNERDRAW) が含まれる場合
コントロールの描画は 親window に委ねられる (WM_DRAWITEM が親へ send される)。
こうなると、当初のログ部分のデータは親内にしか無いことになるので、抜き出しはかなり困難になるかと思われ
557 :
デフォルトの名無しさん :2005/12/21(水) 00:32:51
いろいろ試してみたのですが、どうもうまくいかないので 質問させてください。 ShowWindow(hWnd, SW_HIDE)を使って、自分以外のアプリのウインドウを 外から完全に見えないようにしたいのですが、うまく動作しない アプリがあります。通常はメインのウインドウも、タスクバー上も 完全に消えるのですが、どうもdelphiなどで作られたものは、 タスクバー上の表示が残ってしまうようでした。 TOOLWINDOWならタスクバーに表示されないという話もあったので、 SetWindowLongで、WS_EX_TOOLWINDOWをセットしなおして、SetWindowPosで 変更を有効にする、またSetWindowLong自体でSWP_HIDEWINDOWをする、 (関係ないと思うけど)EnableWindowを試してみる、などを試しても うまくいきませんでした。 環境は、Win2000SP4上でVC++6.0proとVC++toolkit2003を両方 試してみました。もしアドバイスなどありましたら、よろしく お願いします。
単にタスクバーに表示されてるウィンドウとデスクトップに表示されてるウィンドウが別物ってだけじゃね?
560 :
デフォルトの名無しさん :2005/12/21(水) 05:18:03
役に立たないかもしれませんが、 Delphiで作られたアプリは基本的に画面の中央に大きさが0*0でVisibleのウィンドウを 持っていて、画面に表示されているウィンドウはこのウィンドウに所有されています。
余計なことしやがるなぁ。
質問です。 ものすごーい初心者的な質問だと思うのですが、WINAPIはここ見たいなので…。 Windowsを作る際に登録したProcで、WM_LBUTTONDOWNを受け取り そこでメッセージボックスを表示してみたのですが、 何故メッセージボックスのせいで処理の流れは停止してしまっているのに ウインドウの再描画などは行われるのでしょうか。
>>564 メッセージボックスの方で、MSGを受け付けてよきにはからってくれているから。
なるほど。かしこいですねMSGBOX ありがとうございました。
質問。 VC6.0でメニューつきダイアログを作り、メニューの「開く」を選択したら コモンダイアログを表示しようとしています。 ですが GetOpenFileName を呼ぶと必ず0(エラー)になってしまいます。 OPENFILENAME ofn; memset(&ofn,0,sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hWnd; // ダイアログのHWND ofn.lpstrFilter = "テキスト(*.txt)\0*.txt\0すべて(*.*)\0*.*\0"; ofn.nFilterIndex = 1; ofn.lpstrFile = szFileName; ofn.nMaxFile = _MAX_PATH; ofn.lpstrTitle = "ファイル名の取得"; ofn.lpstrDefExt = "txt"; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; GetOpenFileName(&ofn); と、ネットのサンプルをほぼそのまま使っているのですが、何が問題かわかりますでしょうか。 ダイアログのスタイルで「コモンダイアログを出しても良い ○×」という設定があるのでしょうか?
試しにダイアログPROCの外で呼んでみた場合、正しく動作しました。 やはりダイアログのスタイル設定あたりでしょうか。 それともダイアログPROCの中からは、コモンダイアログは呼べないのでしょうか。
CommDlgExtendedError()は何を返す?
えーと、2ですね。 今2は何を表すのか探してます。とりあえず結果だけとりいそぎ。
エラーの内容は CDERR_INITIALIZATION(0x0002) そこからぐぐって、原因がわかりました。 ofn.lpstrFile = szFileName の場合 szFileName[0] = '\0'; しておかないといけないようです。 猫プロにもそんなこと書いてなかった(´・ω・`) 推測するに、ダイアログPROCの中で確保したローカル配列変数は、0で初期化されていない。 たまたま猫プロはグローバル変数であり0が入ってた。 たまたまダイアログ作る前にWinMainで作ったローカル配列変数は0が入ってた。 ということでしょうか。なんてこったい。
>>571 OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST がついてるからね。
実在するファイル名を szFileName にセットしていた場合は成功すると思うよ
573 :
デフォルトの名無しさん :2005/12/21(水) 16:01:07
ま た 猫 か
574 :
デフォルトの名無しさん :2005/12/21(水) 18:00:52
マウスをクリックさせる関数のようなものはありますか? マクロで位置を記録して、ある位置にきたらクリックさせたいのです。
>>571 猫は概要を把握する程度で、詳細はMSDN(それも英語の方)を参照したほうがいい。
577 :
574 :2005/12/21(水) 19:46:36
578 :
デフォルトの名無しさん :2005/12/21(水) 20:11:53
あるウィンドウ上のStaticおよびButtonコントロールのウィンドウハンドルを取得するにはどうすればいいですか。 当該ウィンドウのウィンドウハンドルはわかっています。
>>578 EnumChildWindows()でWindowクラスを調べてGetClassName()で
"BUTTON"("STATIC")かどうか。
580 :
578 :2005/12/21(水) 20:34:15
>>579 ありがとうございました。
同一Windowクラスのコントロールが複数個ある場合、
それらがEnumChildWindows()で列挙される順序は、常に固定ですか?
どうやればいいのかわからなくて質問するならわかるのだが、何でAPIの仕様を質問するんだろうな。 MSDN見ればいいし、それに勝る解決法はないだろうに。
>>580 site:microsoft.com EnumChildWindows
これでググってごらん。
タスクマネージャのネットワークタブで、送信バイト数、受信バイト数ってあるけど、これはどうやって取得するの?
584 :
580 :2005/12/21(水) 21:38:03
585 :
557 :2005/12/21(水) 22:23:21
>>558-560 早速のアドバイス、どうもありがとうございます。
ご指摘の通り、大きさ0のウインドウがオーナーになっているため
消えなかったようです。オーナーウインドウを消したら、無事タスクバーの
表示も消えました。まさか、そういう仕様になっていたとは・・・
きっと自力ではなかなか気が付かなかったと思います。
本当に助かりました。どうもありがとうございました。
スレ違いな質問でしたらすみません。Windowsを使った 画像処理で簡単な色抜きを行いたいと思い、TransparentBlt()を 用いて処理しようと試みたのですが、msimg32.dllのインポートの やり方がわからずに色々試してみたのですがエラーが出ます。 またそれを使う場合初めに#include<wingdi.h>と宣言しなければいけない のでしょうか? マスクを使った画像処理を出来ればいいのですが、簡易な画像処理方法を 学びたいためTransparentBlt()関数について知りたいです。 どうかご助力お願いします m(_ _)m
>>586 まずはMSDN
次はTransparentBltをぐぐってサンプルを探すと良いと思います
それが一番早いかと
588 :
574 :2005/12/22(木) 03:51:38
度々すいません。
IEの入力フォームにプログラムを使って文字を表示させたいです。
例えばヤフー(
http://www.yahoo.co.jp/ )のトップの検索文字を入力する欄に
文字を送信して表示させるにはどうしたらよいのでしょうか?
自分で作った他のプログラムのテキストコントロールにはSendMessage()を使って
文字表示ができたのですが、IEになるとどのURLでもGetClassName()で
返ってくる名前が一緒なのです・・・
IEでGetClassName()を使って取得した名前の一覧は
WorkerW
ReBarWindow32
ToolbarWindow32
ComboBoxEx32
ToolbarWindow32
ComboBox
Edit
ToolbarWindow32
ToolbarWindow32
WorkerW
ToolbarWindow32
ATL:1000D0F8
WorkerW
msctls_statusbar32
msctls_progress32
Shell DocObject View
Internet Explorer_Server
Internet Explorer_TridentCmboBx
ちなみにEditにSendMessage()で文字を送ると、アドレスバーの所に表示されます。
589 :
586 :2005/12/22(木) 06:14:14
TransparentBltで検索したところ余り参考になるものもなく、
MSDNも見つけにくかったのですが、色々&検索をかけた結果
参考になるものを見つけることができ、その指示どおりにしたところ
ビルドに成功しました。
>>587 氏
色々考えすぎて熱くなってました。これからはもう少し落ち着いて
検索するようにします。再度検索するように指示してくださったことに
感謝します。ありがとうございます。
得てしてそんなもんだな。
>>588 IEのドキュメントエリアのボタンとかフォームはウィンドウじゃないよ。
だから、外部からSendMessageとかはできない。
キーボード入力をエミュレートして、TAB数発と、文字列を流し込むとかで、できるかも。
IEを外部から操作したいならCOM経由が基本だが。 そもそもYahooやGoogleの検索結果を表示させたいだけなら自分で検索結果のURL生成してそれ表示させたほうが楽。
モードレスダイアログの親を作成・破棄時に有効・無効化して、 モーダルダイアログとして機能させる事は有りなんでしょうか?
>>593 有り無しの判断基準がわからんのでなんとも。
MFCではそういうことやってるようだが。
ありです
>>593 例えばモーダルダイアログを同時に複数必要とするときなどには常套手段です。
case WM_COMMAND: static int a; a=rand(); printf("%d",a); return 0; なんていうのやめた方がいいですか? WM_COMMANDが同時に送られた時、a=rand();が同時に実行されたらaのデータが壊れると思うのですが。
>>597 それを見ただけでは一概に言えないが、マルチスレッドにしていないなら
メッセージを同時に処理することはできないから大丈夫。
case WM_COMMAND: { static int a; a=rand(); printf("%d",a); return 0; }
>>598 メッセージはシリアライズされるので、マルチスレッドでも大丈夫。
602 :
601 :2005/12/22(木) 19:25:08
↑は忘れてくれ。ボケてた
EnterCriticalSection ?
604 :
574 :2005/12/22(木) 20:49:15
>>600 case の中で変数宣言すんなってことじゃない?
606 :
593 :2005/12/22(木) 21:21:16
ここにレスしてくださる神々の皆様は、職業がPGとかSEなんでしょうか? みんなが使わない様なAPIに詳しかったり、知識が凄かったりするんですが
いんやニート
609 :
デフォルトの名無しさん :2005/12/23(金) 00:04:00
メッセージキューはスレッド毎に用意されます。 ちなみに、OSはシステムメッセージキューと呼ばれるキューを一つもっていて、 まず、ここに、すべてのメッセージが蓄えられます。それで、OSによってこのキュー内の メッセージが動作中のプロセスのスレッド毎に割り当てられたスレッドメッセージキューに 割り振ります。
ふつうに社会人なら こんなとこで便利屋やってないってw
例えニートでもみんな結構高学歴な気がします・・・
例え高学歴でもみんなニートです・・・
高学歴なことは社会では そんなに重要じゃないです
プログラマはかけて何ぼ。ってこれマ板のネタだろ。
615 :
デフォルトの名無しさん :2005/12/23(金) 04:08:18
社会人になって、あまり学歴って関係ないなと思いました。が、 いろな人と接してある程度重要だなってことに気づきました。 高学歴ってことはすなわち、それだけ、努力をしたわけで、 努力をした証になってるわけです。だから、そういう人には やはり、こつこと努力してどんどん成長してくれる人が多いのも事実です。 だから、私が人事ならやはり学歴はみます。別に頭の良しあしをみるより、 努力できるかという視点で。あくまで、仕事に関してで、人間性はまた別問題だが
>>615 マ板でやれ。
まぁ、大学でで頭がよくても使い物にならないプログラマは掃いて捨てるほどいる訳だが。
617 :
デフォルトの名無しさん :2005/12/23(金) 04:32:45
そんな事を言ってる君は既に低学歴って事を証明しているわけで、 まぁ、すぐに人にあたるところからみても、あんまいい人生を送ってないところが まで見えてしまい、その環境のせいで、性格も悪そうだし、やっぱ、採用したくない。 だから、君をせめたりしないよ。環境が悪いんだ
ヒント:スレ違い
>>616 が一番の癌なわけだな。
自分より高学歴な人間を上手く使えないだけ。
PGの世界は単純だ。
ペーパーテストの能力が高ければ、PGとしても能力も高い。
コーディングというのは創造性のかけらもない仕事だからだ。
実力差として存在するのは、唯一最善の回答にたどり着けるまでの所要時間の差だけだ。
コーディングは、存在しない機能・仕様を考え出す能力とは別のもの。
>>598 見落としていました
ありがとうございます
>>619 「PG = コーダー」 と定義した上での話に限れば、
少なくとも定型業務系の仕事なら君の言っていることは正しい。
しかし、現実には「PG = コーダー」とは限らないし、
仕事も定型業務系だけとは限らない。
極度に限定した状況での話しか出来ない
>>619 は多分高学歴なだけの馬鹿。
このスレと全く関係の話をしている連中は学歴職業を問わず単なる屑。
>>619 どうみても底辺PGです。
ありがとうございました。
義務教育を終えた後、レベルの近い学友と切磋琢磨する機会がなかった
>>616 が気の毒だな。
高校入試を手抜きして、高校でレベルの低い周囲を見下して幸せ回路を発動させてただけなのに。
PGとしての能力というものを残酷な数字で比較されることがないので、
自分が凄いレベルなのだと思い込んでしまう高卒PGもいるかもしれない。
625 :
619 :2005/12/23(金) 08:26:52
うるせえハゲ。テメエの意見なんかどうでもいい。
ちなみに漏れは高卒〜就職〜酷使PG〜退職〜ニート
大学出の人にとっては大学卒は普通のことなので、 わざわざ人を評価するときに大学出かどうかについて触れたりしない。 また、文系・理系の出身学部で得意分野に顕著な違いがあることも知っているので 「大学」とひとくくりにすることもしない。 言いたいことはわかるな?
高学歴でも低学歴でもいいからマ板逝け
>>628 >文系・理系の出身学部で得意分野に顕著な違いがあること
詳しく
VIPでやれ
こんなプログラマはVIPに逝け! ・UHFアニメはヤシガニってナンボ ・2chでアク禁喰らうと、妙にうれしくなる ・キンタマウィルスに正義を感じた ・一昨日の晩、久々に神が光臨した ・というか、何でもいいから今すぐ光臨して欲しい ・と思っていたら細木数子が光臨して、まいった ・しかも帰ってくれない ・酔ってやがる ・歌いだした
東大卒文系PGの話 社員教育1ヶ月でその辺のへぼ理系情報系院卒PG並に知識を集積 3ヶ月後には物凄い使える人間に やっぱり理解度と記憶力が半端じゃないらしい 一度失敗すると、二度と同じミスをしないらしい
何でここでやるのか、マ板でやらないのか理由を言え。
そんなにまともな社員教育できる所なら東大卒じゃなくても使いこなせるだろう
636 :
616 :2005/12/23(金) 15:22:17
で、>619=>624はなんで漏れに粘着しているんだ? そんなに自分より低学歴な上司に絡まれた恨みを晴らしたいのか? 残念ながら漏れは低学歴でもなければ大卒の部下をそれなりに仕切ってもいるわけだが。 それはさておき、ちょっと質問。 MSDNでWinExec()の説明を読むとCreateProcess()を使えとある。 また、CreateProcess()の説明にもWinExec()はCreateProcess()で実装されているとある。 すると、WinExec()の第二パラメータのSW_*のフラグはSTARTUPINFOに突っ込めばいいということかな? #確かにdwFlagsの説明にSTARTF_USESHOWWINDOWがあり、wShowWindowにもそう書かれているようだが。
すみません、InternetExplorerのアドレスバーに表示されてる URLを取得する方法はないでしょうか?グローバルフックはすでに しています。よろしくお願いします。
>>636 騙るなw
部下を仕切るような人間が、APIの質問なんかするわけないだろがw
しかも質問内容が、「今さらこんな質問すんな、初心者」的な内容だし。
【ゴールデンレス】 ∩ ・∀・)∩∩ ´∀`)∩ このレスを見た人はコピペでもいいので 〉 _ノ 〉 _ノ10分以内に3つのスレへ貼り付けてください。 ノ ノ ノ ノ ノ ノそうすれば14日後好きな人から告白されるわ宝くじは当たるわ し´(_) し´(_) 出世しまくるわ体の悪い所全部治るわでえらい事です
640 :
616 :2005/12/23(金) 15:58:59
>>638 うちは本来Unix屋なのでWinAPIの仕事は基本的に半端仕事しかやらない。
部下を仕切るといってもあくまでも現場の人間なので半端仕事は自分で片付けてしまう(そうせざるを得ない)。
半端仕事なんで、自宅でやっているから本その他はない。
参考にしたソースはWinExec()を使っていたので、どうせならCreateProcess()に書き換えておこうと思って質問した。
まぁ、想像力が足りないのはあんたの勝手だが。
Unix屋が自分責任で自作コードを試さずに、2ちゃんに質問を書き込むとは恐れ入った。 WinExec()にはUnicode版がない。Unix屋がUnicode対応を気にする必要があるかも考えてみろ。
642 :
616 :2005/12/23(金) 16:18:42
>>641 いやだからさ、自分の想像力のなさで思い込むのは勝手だけど、それを前提にどんどん捏造しないでよ。
丁度いいネタだから質問したんであって2chの結果をそのままノーチェックで採用するなんて有り得ないし、
Unicode版を意識してないからこそ頓着しないで質問しているわけだし。
#そうか、WinExec()にはUnicode版がないから、Win32では使うなとMSDNに書かれているのか。参考になった。THXw
やはりただのアフォだったか
MSDNが意味ありげなのに意味不明な記述するから、 独自実装しなきゃいけないと思い込む人が出てしまう。罪なことだ。
645 :
デフォルトの名無しさん :2005/12/23(金) 17:13:30
Internet ExplorerでF11を押したときのキオスクモードみたいなのを 実装するにはHWNDをどうしたらいいですか?
646 :
637 :2005/12/23(金) 20:13:25
解決しました。ありがとうございました。
>>642 どの辺が「ちょうどいいネタ」なのか教えてはくれまいか?
2chのすべてがおれにとってはちょうどいいネタ。 だが、事実
649 :
616 :2005/12/23(金) 21:42:37
>>647 ・丁度MSDNを読んでて疑問に思った。
・スレ違いの粘着受けていて突っ込み入れたかったが自分もスレ違いになるのは避けたかった。
・結果更に面白くもない結果になったし、今はちょっと反省している。
スルーで
652 :
デフォルトの名無しさん :2005/12/23(金) 22:10:57
Internet ExplorerでF11を押したときのキオスクモードみたいなのを 実装するにはHWNDをどうしたらいいですか?
653 :
652 :2005/12/23(金) 22:13:08
解決しました。
654 :
デフォルトの名無しさん :2005/12/23(金) 22:14:06
Internet ExplorerでF11を押したときのキオスクモードみたいなのを 実装するにはHWNDをどうしたらいいですか?
数学で階乗を求めたときのn!みたいなのを 実装するにはintをどうしたらいいですか?
>>655 その質問はこのスレに相応しいと思いますか?
おい!高卒のUnix屋に敬意を払えよ。
鯖管は板違い
659 :
わたこ :2005/12/24(土) 00:43:23
こんばんは、わたこと申します。 只今、あるアプリケーションが通信を行おうとすると、 端末ユーザにこのアプリが通信を行うことを許可するかどうかの確認をとるという、 PersonalFireWallのような機能のプログラムを作成したいと考えております。 パケットの監視自体はSOCKETやWinPCAP等を用いればできると思うのですが、 どのアプリケーションが行う通信であるか、という情報はパケットからは得られないと 思います。 そこで、通信が発生した際に、それがどのアプリのものであるかを返すような APIは存在しないでしょうか。APIを用いる以外の方法でできる、という 情報をお持ちの方も、ご教授していただければ幸いです。 よろしくお願いいたします。
660 :
デフォルトの名無しさん :2005/12/24(土) 00:47:41
WinXPでのアプリケーションで、 指定されたフォルダを一気に作るAPIを教えてください。 あと、そういったフォルダを作成する場合、そのアプリケーションが アドミンで実行されていない場合、場所によっては作成できないんですよね? よろしくおねがいします
>>660 >指定されたフォルダを一気に作るAPIを教えてください。
MakeSureDirectoryPathExists
>>661 660ではないが、これは知らなんだ。(1個づつCreateDirectoryしてた)
サンキュー!
WindowsXPでタスクマネージャのようなプロセスのイメージ名が取れるAPIがあれば教えて頂けないでしょうか。 できればプロセスの実行元ファイルのパスなどでも良いのですが・・・ よろしくお願いします。
Tool HelpかPSAPI 前者なら、CreateToolhelp32Snapshot()辺りから調べること。 後者ならEnumProcesses()あたりから。
666 :
デフォルトの名無しさん :2005/12/24(土) 13:01:54
667 :
デフォルトの名無しさん :2005/12/24(土) 18:58:02
800KBのXMLファイルを読み込む自作ソフトは駄目ですかね?? 使う側からの意見をまじめにお願いします。将来的には800KB*4個くらい使いますが、 読み込むのはそのうちの一つです。 初めはCSVでサイズも200KBだったのですが、データが本来ツリー構造だったので、XMLにしてみました。 ちなみに、MS-Cabinetで圧縮しようかと思ったのですが、実行時に毎回解凍するのもあれかな・・なんて
いいよ
671 :
デフォルトの名無しさん :2005/12/24(土) 20:01:08
とある外部の実行ファイルhoge.exeがポートXを開いて通信していることが分かっているときに,そのソケットIDを取得するAPIってありますか?
672 :
デフォルトの名無しさん :2005/12/24(土) 20:03:14
ファイルサイズ自体は気にしないなあ 読み書きには気を使うけどね 特に長ったらしい文字列と格闘するのがだるい
673 :
デフォルトの名無しさん :2005/12/24(土) 20:05:16
ありがとうございます。
ちなみに、エディタを搭載していて、強調表示する予約語とコード補完とパラメータ
補完に使用するメソッドの宣言のデータです。で、メソッドにオーバーロードされている関数が含まれていたので。
ちなみに、まだ、途中ですが、
http://homepage2.nifty.com/whale-whale/ こんな感じです。データベースに接続し、SQL文を実行して、その結果をグリッドに
表示します。
グリッドは固定列表示や列でのグループ化や列の位置を自由に調整できます。
まぁ、このソフトは社会人にしか需要がありませんが。
674 :
デフォルトの名無しさん :2005/12/24(土) 20:09:46
>>673 下世話な事かもしれないが、この形で200k↑のファイルってオーバーフローしそうな気がするんだが大丈夫なのかね
675 :
デフォルトの名無しさん :2005/12/24(土) 20:14:15
673です。 すみません、どこでオーバーフローするのでしょうか?? XMLは起動時に読み込んで、それを内部で検索しやすい形のデータ構造に変換しています。 で、コード補完時に、キャレット位置の直前のトークンから必要なメソッドだけを取り出して、 補完リストに表示させています。XMLも800KBとありますが半分以上はタグとか属性でサイズを 食っています。
676 :
デフォルトの名無しさん :2005/12/24(土) 20:24:54
>>674 いやね、業務用っぽいが、こういうRDBって一点集中あんまりすると仕様変更時のリスクが上がるわけで
俗っぽい言い方すると柔軟性に欠けるんじゃないのかねと
普通はもうちょいデータばらして管理分散するもんじゃ?
677 :
デフォルトの名無しさん :2005/12/24(土) 20:26:00
675だった、自分にレスしてどうするorz
678 :
デフォルトの名無しさん :2005/12/24(土) 20:37:10
ははは。 675です。 おもいっきり、業務用です。XMLのデータはエディタで使う予約語とメソッドの宣言の データだけです。それ以外のアプリケーションの設定データはiniファイルを使用しています。 エディタのそれ以外のデータも。 で、接続するデータベースのバージョンによって、予約語とかメソッドの数や種類が違うので、 その分XMLファイルを用意しようと思っています。
DB版グループウェアみたいな感じにでもするのかね? まあAPIの話から脱線してるしスレ違いだからROMに戻るよ
WndProc に関してです…… WndProc 内に処理を書くのでは、どうしても諸情報がグローバル変数になっちゃうのが嫌で嫌で、 メッセージループ内で GetMessage した後 DispatchMessage する前にメッセージ処理させようとしたんですが…… WM_ACTIVATEAPP とかのメッセージが捕まりません。なんで〜。・゚・(ノД`)・゚・。
CopyRectってあるけど、構造体のコピーって ANSIで認められてないんだっけ?
683 :
682 :2005/12/24(土) 23:06:50
あ、いかん撤回。 書いたぞばから気が付いた、 CだけがCallerとは限らないんだ
>>680 全てのメッセージがGetMessageで捕まるわけではない。
各ウィンドウプロシージャへ直接送られるメッセージもある。
ちなみに自分からメッセージを送るときには
前者ならPostMessageで、後者ではSendMessageを使う。
>>680 確か、一部がコールバックのみにしか行かなかったからだと思う。
WM_PAINTやWM_COMMANDもうまく行かないはず。
コールバックで来たメッセージを記憶し、
それだけはグローバル変数(関数のstatic)を我慢して使い、
GetMessageした後の部分で調べて処理するのがいいかな。
SendMessageですら送受信のスレッドが同一なら直接ウィンドウプロシージャが呼び出される
あれだろ、メッセージキューを使うのと使わないメッセージの差
マイクロソフトが定義してあるマクロの一覧が欲しいのですが WEBでないでしょうか? たとえば、 RECTとかLPRECT、LPCTSTRみたいなもの
691 :
689 :2005/12/25(日) 00:47:14
と思ったけどごめん、構造体の類は載っていないね。
692 :
688 :2005/12/25(日) 00:53:33
>>689 さんくす!これです。
マクロじゃなくて、型定義でしたね。
ありがとうございました。
なぜこれを定義する必要があったんでしょうかね? #define VOID void voidでいいじゃん
INT UINT BYTE LONG void <---ショボスwwwwm9(^A^ WORD DWORD ってなるから
>>693 たまたまC/C++ではtypedefされているだけでWin32APIを使うのはC/C++だけとは限らないから。
1.ウインドウを作成 2.ツールバーコントロール(ToolbarWindow32)を付ける 3.ボタン以外の部分をダブルクリック ダイアログウインドウらしき物が一瞬出て消えるけど、 これは何?
697 :
デフォルトの名無しさん :2005/12/25(日) 01:31:58
API関数を自作することって出来るのですか?
はい
>>660 SHCreateDirectoryEx
>>694 でもWinAPIではINTよりintが多用されているという事実。
>>697 でもそれは何かのAPIであってもWinAPIではないよ、一応言っておくけど。
WindowsXPスタイルで表示する場合にマニフェストファイルを使ったりしますよね? それを使った場合で、トラックバーの範囲をハイライト表示する機能がMSのバグ?で表示されない問題があったと思いますが 何か対処ご存知の方いますか? トラックバーだけWindowsXPスタイルを適用しない、という方法以外で。 よろしくおねがいします。
>>702 スクロールバーに仕様変更する。
トラックバーはつまみが小さく感じることが多く使い勝手悪し。
ウィンドウ右上の×ボタンを押した時の履歴をとりその情報を蓄積。 あっ…やべ、消しちまった。 って思ってメニューを選ぶと閉じたアプリケーションを再び開いてくれる 常駐ソフトを作るとしたら、核となる全てのウィンドウの×ボタンが押される タイミングを監視する部分はどう実装すればいいと思われますか?
それが核かよ
間違って消して舞うことあるあるw。
コントールボックスをダブルクリックで閉じたり、タスクバーから閉じたり 誰もが×ボタンで閉じるとは限らないからお前専用のアプリだな
>>703 ありがとうございます。
スクロールバーって範囲をハイライトで表示できましたっけ?
ウィンドウを復元するのは難しくないか? 閉じるふりして非表示にしておき、 一定時間経ったら undo する意思がないとみなして 本当に閉じる、っていうのなら可能かも。
Alt + F4が好きだな
> 閉じるふりして非表示にしておき、
> 一定時間経ったら undo する意思がないとみなして
> 本当に閉じる、っていうのなら可能かも。
その機能少しだけ試してみたいかも
>>708 SC_CLOSEをフックすることとかできないんだっけ。
713 :
agesage :2005/12/25(日) 21:04:16
エクセルみたいな20×20の表を作り、その中にデータを入れていきたいんですけど APIで作るのは、厳しいですか?また、どんな、APIを使えばいいですか?お願いします。
WinAPIではないけれどFlexGridコントロールはどう?
716 :
agesage :2005/12/25(日) 22:51:38
>>714 >>715 ありがとうございました。
そして、すみませんでした。環境を書くのを忘れていました。
XP(HOME),VC2003 です。
エディットコントロールで、がんばってみます。
717 :
デフォルトの名無しさん :2005/12/26(月) 01:25:35
VisualC++6.0を使っています。 リストボックスの項目をダブルクリックすると、その項目の文字列を取得するプログラムは どうやって作ればいいのですか? リストボックスをダブルクリックしたときのメッセージがLBN_DBLCLKというのはわかったのですが そのときにどういうプログラムを組めばいいのかわかりません。 よろしくお願いします
719 :
デフォルトの名無しさん :2005/12/26(月) 01:54:21
721 :
デフォルトの名無しさん :2005/12/26(月) 02:11:03
SendMessage(HWND,LB_GETTEXT,SendMessage(HWND,LB_GETCURSEL,0,0),(LPARAM)pText); こんな感じですか?HWNDは、リストボックスのハンドルらしいですが、ウインドウプロシージャの 第一引数でいいんですか?あと、最後のpTextはchar *pText;と定義したものを使うのですか?
723 :
デフォルトの名無しさん :2005/12/26(月) 12:08:44
マルチモニタの環境で、1つのディスプレイだけを消灯させたいのですが、 省電力の設定が個別に出来ません。 両方消えてしまう・・・・ これは片方ずつ設定は可能なのでしょうか?
例えばTCHAR ptStr[32]=TEXT("642");として これを数字に変換する場合、atoiで変換するのはまずいですよね.. その場合MSはどの様なAPIを提供してますか?
>>725 VC/BCCは独自に<tchar.h>で_ttoiを用意している。
どうしてもWinAPIでやりたければ<shlwapi.h>にStrToIntがある。
C++ならstd::basic_istringstream<TCHAR>やboost::lexical_castも使える。
728 :
デフォルトの名無しさん :2005/12/26(月) 14:30:54
Petzold の Unicode 入門の話で出てきた最後のサンプルプログラムで VC2003 のプロジェクトのプロパティで プリプロセッサの定義の項目で UNICODE 識別子を入れたら 警告が表示されて、表示も変になりました。 しかし、 _UNICODE 識別子も追加するとメッセージボックスの表示は元に戻りました。 これは UNICODE 識別子によって WCHAR などの型が有効になるだけであって、 _UNICODE を定義しなければ関数のワイド文字版と解釈されないということでしょうか。
729 :
デフォルトの名無しさん :2005/12/26(月) 17:02:53
新しいプロセスを作って、 そのプロセスが終了した時の戻り値を参照したいのですが、 どうすればいいですか? 環境は、Windows2000で、VC++.netです。
>>729 つ [CreateProcess(), GetExitCodeProcess()]
>>721 pTextに十分な(LB_GETTEXTLENで得られる以上の)領域を確保していればいい。
>>725 strtol
wstrtol
というものもある
733 :
729 :2005/12/26(月) 17:55:14
>>730 どうもです。検索語すら思いつかなかったので助かりました。
CreateWindowExをつかってタブを貼り付けたんですがXPスタイルにするには、 どうすればいいんですか? 環境はVC++6.0です。 暇があったらでいいです。
>>728 UNICODE が Win32用で
_UNICODE が CRT用
737 :
デフォルトの名無しさん :2005/12/26(月) 20:15:00
738 :
728 :2005/12/26(月) 20:17:37
>>736 どうもありがとうございます。
納得できました。
740 :
デフォルトの名無しさん :2005/12/26(月) 20:40:39
>>739 もしかして、
LoadLibrary("winsock.dll");
ってやって、直叩きですか?
当りなら、どこかお勧めのサンプルコードのURLとか・・お願いします。
おまいさんはGDIを直接使うのに LoadLibrary("gdi32.dll"); からはじめる人かね?
742 :
デフォルトの名無しさん :2005/12/26(月) 21:15:34
743 :
デフォルトの名無しさん :2005/12/26(月) 21:22:28
すまん、一点疑問が・・・ GetMessageでイベント待つのと、acceptでコネクション待つのを同時に待ちたいのだけど・・ どうするんだ? unix系なら、FDがあれば、selectで自分で同期とれるけど・・CSocketでblackboxだった部分を 実装せにゃあかんのかな? ・・・一晩悩んで見ます。
>743 WSAEventSelectしてMsgWaitForMultipleObjectするか、 WSAAsyncSelectしてウインドウメッセージで飛ばすか。
746 :
デフォルトの名無しさん :2005/12/26(月) 22:04:19
Visual Basicのようにダイアログボックスがメインなプログラムを C++でするにはどうすればいいんですか? どのサイトでも最初に空のウィンドウを作ってて ダイアログボックスを主にする方法が解らないんです。
WinMainからDialogBox
748 :
デフォルトの名無しさん :2005/12/26(月) 22:19:52
空のウィンドウは作らなくてもいいって事ですね。 しかし、DialogBoxParam()で引数の親ウィンドウハンドルをNULLにすると表示されません…。
・ShowWindow ・WS_VISIBLE
750 :
デフォルトの名無しさん :2005/12/27(火) 11:49:38
WriteProfileStringでのINIファイルへの書込みって スレッド間の排他、プロセス間の排他等の面倒は見てくれてますよね?
751 :
デフォルトの名無しさん :2005/12/27(火) 12:13:36
質問聞いてください。オーナードローリストビューを勉強してるのですが、 どうしてもちらつきが気になります。WM_ERASEGNDもやってみたのですが効果があまりありません。 WM_DRAWITEM内で消去の意味で一度、白で塗って書き込みしてるのは分かるのですが・・。 どなたかオーナードロリストビューでちらつきをなくす解決方法分かりませんか??よろしくお願いします。
聞くだけ
背景を塗る行為がちらつきの原因
754 :
デフォルトの名無しさん :2005/12/27(火) 13:15:30
>>753 白で塗って書き込みしてるのが原因はわかるのですが。。
現在、ダブルバッファで作成してみてます。
755 :
デフォルトの名無しさん :2005/12/27(火) 13:17:54
オーナードローリストビューでダブルバッファでちらつき抑えられるんじゃないかと考えて るんですが、作られた猛者いますかね?
つ[WS_CLIPCHILDREN]
757 :
デフォルトの名無しさん :2005/12/27(火) 13:28:57
>>756 変化ないです。。
やっぱダブルバッファしかないのか。。
ダブルバッファの場合、やっぱリストビューのサイズのビットマップ作成して
WM_PAINTで転送という形でしょうか??
758 :
デフォルトの名無しさん :2005/12/27(火) 16:15:29
メッセージの整数値がわかっていて それがなんのメッセージ(WM_なんたらかんたら,とか)かを 調べる方法はありますか?
Win32API使うプログラムなら大部分がやってる
>>758 windows.hの中身を見る
ファイルを開くのも面倒だというなら、vc統合環境からgrepで探す
メッセージの数値がわかっているというのは、ひょっとして
何が届いたのかをブレークポイントで止めて調べてるんじゃないだろうな
そういうことがしたいならspyを使いなさい
それともspyのようなツールを作っているなら、vcのサンプル内に
{ 0x0400, "WM_USER" } のようなデータが列挙されたソースがあるはず(うろ覚え)
もしあればコピーして流用
761 :
デフォルトの名無しさん :2005/12/27(火) 16:52:49
>>760 spy++ を起動しながら開発環境の debug モードで
でプログラムを走らすと,
かなりの確率で開発環境がかたまるんですよ
それと,windows.h そのものには
メッセージは定義されていないですね
winuser.h
windows.h になかったらないと思うのが変
ウォッチでuMsg,wmとかやればVCがウマいこと表示してくれた気がする
>761 それはマルチスレッドのデバッグではないかい?
768 :
デフォルトの名無しさん :2005/12/27(火) 23:40:58
今日は久々に発狂したかと思った。 C:\Meadow\1.15\bin>cat > test.cmd meadow foo.txt type foo.txt C:\Meadow\1.15\bin>test.cmd C:\Meadow\1.15\bin>meadow foo.txt C:\Meadow\1.15\bin>type foo.txt 指定されたファイルが見つかりません C:\Meadow\1.15\bin>type foo.txt なぜじゃぁぁぁ # つまり Win32用emacsの一つである Meadow は 終了時に flush してなくて一秒くらい立ってから ファイルの実態に反映してるのです。 脳が溶けたので寝ます。
>>768 WritePrivateProfileString でつくった .ini ファイルを
その直後に ReadFile してもまだフラッシュされてないから読めない、
というのは意味がわかるけど、768はどういう理由なんだろう。
OS がうまくやってくれそうに思うんだけど。
男は脳が溶けるぐらいでないとな。
maedowのサブシステムがWindowsだからというオチではなくて?
773 :
デフォルトの名無しさん :2005/12/28(水) 10:11:30
文字コードから、半角か全角を調べる方法を教えて下さい IsDBCSLeadByteを試しましたが、これだと半角カタカナが2バイト文字 と判断され、使えませんでした
文字コードで違う
775 :
773 :2005/12/28(水) 10:24:04
失礼しました。 Unicodeにて判定したいのです。 「ア」ですと、0xFF71なんですが、これを半角と判定させたいのです。 (マルチバイトでコンパイルすると、0xB1でIsDBCSLeadByte()使っても半角判定は可能なのですが・・・)
1番それらしいのはGetStringTypeExだが、これではそのような全角半角の判定はできなさそうだ。
>>775 Unicodeで0xff??なら半角なんじゃないの?
>>776 その関数の戻り値C3_HALFWIDTHをチェックする事で出来ました
ありがとうございました
>>775 0xFF21が「A」で全角なんです・・・
んじゃ、0xff80-0xffffで。
780 :
776 :2005/12/28(水) 13:17:42
うお、C3_HALFWIDTHは気付かなかった、すまん。
しかし、UNICODEで全角だ半角だってのもなあ。
まぁ、文句は全角英数なんていらんものを作った人に言ってくれ。
半角カナはまだしもなんで全角英数だったんだろうね
それはX0201だけで文章書くためだけど、 キリル文字が入ってる意味がわからん。
SetMapModeでマップモードをDCに適応するのですが、 確かにMM_LOENGLISH,MM_HIMETRICなどの定数をセットした場合にはyの値は上方向を指します。 しかしMM_TEXTを指定しますと、MSDNによるとやはりMM_LOENGLISHなどと同様に 各論理単位を、1 デバイスピクセルへ変換します。x の正の値は右方向、y の正の値は上方向を指します。 とあるのですが、私の環境ですとyの正の値は下方向のままで設定されます。 環境はBCC5.5.1なのですが・・・
翻訳の間違い。 よくあることだ。
MM_TEXTってデフォルトのやつだから左上原点だろ
質問です。 GDIPLUSを使ってプログラムを組んでいるのですが、 Graphics* pGrp; にnewで作って、まぁ画像やら矩形やらは自由に扱えるようになりました。 次に文字列に挑戦してみたところ、Fontの引数にhFnotが使えることからそれを採用することに。 その時HDCも必要なので pGrp->GetHDC() してみました。 ところがそうすると、次からpGrpが使えなくなってしまうのです。 エラーが出るのではなく、画像も矩形も、そのGraphicsを通して描画命令をしてもまったく反映されなくなります。 原因をしぼりこんだところ pGrp->GetHDC(); とこれを呼び出すだけでpGrpが死んでしまうようです。 名前からしてみればとてもそんな命令だとは思えないのですが、これは正しい動作なのでしょうか。 単純にHDCを取得したいだけなのですが…。
ReleaseHDCしてる?
あ、それですorz ありがとうございました。 Get系つくるとき GetHDC(){return m_hDC;} って実装するという固定観念のせいで、解放が必要という考えに及びませんでした。 たしかにWindowsAPIもともとのやつは、GetDCに対して必ずReleaseが必要ですね。
CreateFontについて質問。 どのフォントを選んでも 「高さ12と指定しているのに、測ると13ドット以上ある」ものばかりなんですが、微調整の方法はあるでしょうか。 高さを12ドットと指定したからには、0〜11ドット目までにしか描画してほしくないのです。
ピクセル数指定できたっけ?
heightの単位を間違ってるんだろ。
SetMode(hDC, MM_TEXT);
nHeight フォントの文字セルまたは文字の高さを論理単位で指定します。 文字の高さ(em height としても知られている)とは、 文字セルの高さから内部レディング(アクセント記号などのためのスペース)の高さを引いたものです。 フォントマッパーは、nHeight パラメータに指定された値を次のように処理します。 値 処理 >0 指定された値をデバイス単位に変換し、それを利用可能な各フォントのセルの高さと比較します。 0 フォントを探す際に、既定の高さを使います。 <0 指定された値をデバイス単位に変換し、その絶対値を利用可能な各フォントの文字の高さと比較します。 どちらの高さの比較を行う場合にも、フォントマッパーは、要求されたサイズを超えない最大のフォントを探します。 このマッピングは、フォントが初めて使用されたときに行われます。 MM_TEXT マッピングモードでは、次の式を利用して、ポイント数からフォントの高さへの変換ができます。 nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
皆様、細かくありがとうございます。 nHeightを -nHeightにすることで期待通りの動作となりました。
こんにちは。 CreatFileMappingで、プロセス間のデータ共有をしたいのですが、 Windows2000,XPなどでは、同じオブジェクトにアクセスする場合でも、 それぞれのプロセスごとにCreateFileMaaping 及び、 MapViewOfFileを しなければならず、返される領域のアドレスも異なるとききました。 もし、同じプロセスで、CloseHandleで閉じる前に、同じ領域(オブジェクト) に対してCreateFileMapping 及び、MapViewOfFile 2度行ったばあい、得られる ハンドルや、領域のアドレスは同じになるのでしょうか?
試してみればわかるやろ
98しか持っていないに300ペリカ
Advanced Windowsに書いてありそうな気がする。なかったらすまん。
別プロセスの仮想アドレスが同じになろうが別になろうが、どうだっていいんではないかな
802 :
797 :2005/12/28(水) 23:06:27
>>798 XPなので試そうと思えば試せました。すみません。
>>800 ネットで調べながらやってたんですが、断片的な情報でわからない部分が
多かったので質問しました。
とりあえず、その本を読んでみようと思います。
ありがとうございました。
803 :
797 :2005/12/28(水) 23:17:39
>>801 はい、別プロセスについてはそう理解しているのですが、
同じプロセスないで、複数回宣言したら同じアドレスが帰ってくるの
だろうかと思ったもので。798 さんの言うとおり、試してみようと思います。
ありがとうございます。
>>791 8の倍数とかからずれると、サイズが上下した気がする。
それか、背景部分を透過して表示すれば、すこし領域を削れるかも。
質問です。 ダイアログボックスに対し、自前のウインドウをWS_CHILDではりつけています。 このウインドウでWM_KEYDOWNを処理したいのですが、メッセージ自体が飛んできてくれないようです。 何かWSを指定しなければならないのでしょうか?
メッセージを受け取りたいProcに case WM_GETDLGCODE: return DLGC_WANTARROWS; という2行を足しただけで、魔法のようにうまく行きました。 ありがとうございました!
夢を壊すようで申し訳ないが、それは魔法でもなんでもない。 たんなる仕様どおりの動きだ。
(´・ω・`)
試しにMFCでダイアログクラスにOnGetDlgCode()を追加してみたけど落ちてこない。 Spy++で見てもさっぱり。 そのメッセージは一体いつ来るんだろ。
>>810 Dialog本体 ではなく Dialog上に張られたコントロールへMSG
812 :
810 :2005/12/29(木) 13:56:28
>>811 なーるほど、来た来た。THX。
うーむ、Dialogにはっつけた、TabCtrlで切り替えるDialogのフォーカス制御に使えるかと思ったのは甘かったか。
すみません。質問です。 ::EndPaint(in_hWnd,&ps);の :: の意味は何でしょうか?
>>813 C++のもので通称はスコープ解決演算子。
その使い方はEndPaintが特にどこの名前空間・クラスにも属していない名前だということを示すためのもの。
MFC使わなければそういうことで悩まなくて済む
普通にMFC使ってたらEndPaintの前にそんな邪魔なものつけないけどな
VC++使ってると、コード入力支援機能をいかすためだけに::を入れる。
BCB使ってると::入れてコード補完やるとエラー吐くからSetParentとか名前が衝突する物以外入れない
マイクロソフトの移植性排除の作戦
ファイル名(パスつき)の検証をしたいのですが、 パスがあるか、とか、権限があるか、とか禁止文字を使っていないか をトータルで判断するためのAPIありませんか? いったんfopenで開けたらOKみたいなのでもよいのですが、専用のAPIがあればそれを使いたいので お願いします。
ありますよ
>>814 C++の文法でしたか、難しいです(><)
レス有難うございます
C++は簡単だよ クラスの高度な機能以外
826 :
デフォルトの名無しさん :2005/12/31(土) 17:37:37
親が最小化したときに、子(ツールバーとか、メニューとか)に メッセージは飛びますか?
クラスの高度な機能って?くわしく
828 :
デフォルトの名無しさん :2005/12/31(土) 19:51:52
Internet ExplorerでF11を押したときのキオスクモードみたいなのを 実装するにはHWNDをどうしたらいいですか?
828はスルーで
>>821 shell API(path* で始まるapi群)とかは?
C言語とSDK or C++とMFC っていうのをよく効くけどさ。 C++とSDKな俺は馬鹿? MFCはなんか使いにくいから、自分で勝手にクラス作成してやってる。 ステータスバークラスとか、スクロールバークラスとか、ウィンドウ作成クラスとか。
>>831 API仕様変更の度に自分の手を動かす暇人ならOK
API仕様変更についてはあまり考えなくてもいいと思うよ。 それは「C++とSDK」に限ったことじゃない。 「C言語とSDK」でも起こるし。 MFC使えば別だろうけど。
>>832 組んだのが動かなくなるような大幅変更入ったのっていつの話?
win95時代に作ったのがそのまんま動くしコンパイルもできるなあ もう10年前か・・・
837 :
デフォルトの名無しさん :2006/01/01(日) 15:34:42
大して進化してないですね
だいぶAPIは増えたけどね
恐るべき互換性と
だがその互換性を保つために複雑化しているのも事実。
>マイクロソフト セキュリティ アドバイザリ (912840) >Graphics Rendering Engine の脆弱性によりコードが実行される可能性がある >公開日: 2005年12月29日 | 最終更新日: 2005年12月31日 この脆弱性はプログラミングで GDI+ を使わなければ生じないのでしょうか?
>>830 ありがとうございます。
そうします。これからさっそくぐぐってみます。
846 :
デフォルトの名無しさん :2006/01/01(日) 21:57:55
開くダイヤログ 教えてちょ サンプルも
>>846 これやるから帰れ
つGetOpenFileName
CreateProcessとかも
それのなにがわからんのだw?
_splitpathも
それのなにがわからんのだw?
>>831 漏れもそう
あとときどき D + SDK とか Ruby + SDK とかで使っている
去れ、変態オナニーコーダ共
STL+WTLのヘタレ参上
どこにでも沸くなぁ……
856 :
デフォルトの名無しさん :2006/01/03(火) 11:29:53
OSが何なのか調べるAPI、又はマクロがありましたら教えてください。
OSがなんなのかって、Windowsしかねぇじゃねぇか どのWindowsかってんならバージョン調べな
858 :
857 :2006/01/03(火) 11:58:34
あと、マクロってのはバイナリを生成したら関係なくなるもんだからな
859 :
856 :2006/01/03(火) 12:04:58
ありがとうございます。 APIとしては、GetVersionEx辺りでいけそうみたいです。 マクロは、もしかしたらwindows.h辺りに、OS_ME、OS_XPとかと 宣言されているのかなとも思っていました。
それはあったとしても、APIで取得した値と比較するためのものだろう windows.hだけでOSバージョンを識別させようと思ったら、 現存するサポートOSのそれぞれに対応したデータを用意しないといけなくなるんだぞ? そんな非合理的な事をキミはするのか?
861 :
856 :2006/01/03(火) 12:55:12
なるほど。深くは考えていませんでした。 アイコンへのドロップの所で、XPだと"が入ってしまうようで、 その対策でOSの違いを調べる必要が出てきました。 これを機会に、バージョンへの対応を強化したいと思います。
>>861 XPなら〜とかそんな対症療法的な対応すんなよ…
>>861 Shell APIに"があるか判定するやつや、"を取り除くのがあるから
それを使え。
>>862 何理想論言ってるの?
OSによって挙動が異なることはあるから仕方ないだろ。
OSが何だろうが、"が有るか無いかは判定すべきものですが何か?
なんで " が?パス名にスペースがあるの?
マイドキュメントの中にあったりするんじゃねぇの
失敬な。 我が頭髪に不足はない。
OSが何だろうが、"が有るか無いかは判定すべきものですが何か?
はいはい、ワロスワロス。次っ
エクスプローラのアドレス欄に "C:\Documents and Setting\名前\My Documents\" とタイプしてIEが立ち上がったときのもの悲しさ
>>831 Windows 3.1 の頃から C+SDK(最近は C++ + SDK) だが;
大幅に直したことはない。
もともとメッセージクラッカーを使っていたので。。。
プリンタ出力だけは Escape に直しましたけど。。
メッセージクラッカー使わずにテーブルに展開してループ回す香具師もいるよね。 ATL/WTLのUpdateUIマップが丁度テーブルだが
876 :
856 :2006/01/03(火) 18:13:00
XPか非XPかで判断するか、
""が出来るか出来ないかで判断するかという事ですか。
始めは、出来る理由が前者でだと思っていたんですけど、
>>867 さんのスペースがあるのが原因の様な気もします。
98系もXPも、同じようにデスクトップ経由のファイルをドロップしたんですけど、
XPの方は、その前のパスにスペース付きのがありました。
後者の方でやってみたいと思います。
877 :
862 :2006/01/03(火) 18:26:33
881 :
856 :2006/01/03(火) 21:40:19
>>877 98/Meの方でも、フォルダかファイルに
スペースを付けたら""が付きました。
cdでカレデレを変える時も、
スペースがある時に""が必要なのと同じですよね。
XPで検証したら何の問題もなかったけど旧OSなら問題出たってケースは俺は何度も遭遇してるから 素直に従っておくのが吉
>>882 MSDNにかいてあるけど、ウィンドウクラスが解放されるときにブラシをシステムが自動的に
削除するんで(削除してはいけない)システムブラシを使うなということ。
GDI+についてなんですが、 アルファブレンドされないようにする事はできますか? 既に色のある部分へアルファ0で上書きして、一部を透明にしたいのです…
>>882 ていうか、COLOR_3DFACE使いたかったら
(HBRUSH)(COLOR_3DFACE + 1);でいいと思うんだが。
>>883-884 ありがとうございます。
ブラシのリソース開放はOS任せなんですね。
じゃ、CreateSolidBrush(GetSysColor(COLOR_3DCOLOR))にしてみます。
>>886 アドバイスありがとうございます。
でも、+1している理由がわからない…
色の定義が0からだから、0だとNULLと区別付かなくなるからかと。
>>882 お前の目は節穴か?
そのURLにきちんとGetSysColorBrushをWNDCLASSのhbrBackgroundに使ってはいけない理由が書いてある。
むしろCreateSolidBrushの代わりにGetSysColorBrushを使えって書いてあるけど これは何?
>>888 定義が0からってのは合ってるが、NULLと区別がつかなくなるからじゃないし、75点ってとこだな
定数は0から使えるが、ハンドルは0は使えない、決して区別がつくつかないではない
>>890 GetSysColorBrush使えって書いてある次の行にもろ理由が書いてあるんだが?
>>892 ああ、上の行の文とは関係ないのねスマン
>>882 の出してるMSDNのページの解説のとこは、それぞれ相互に関係の無い4つの事柄について説明してるからな
キミが気にしたところは、システムカラーのブラシを使う時は新しく作るんじゃなくて、
リソースの節約のために、キャッシュのブラシを返すGetSysColorBlushを使えってこと
895 :
890 :2006/01/04(水) 10:17:18
>>894 重ねてサンクス。で、hbrBackgroundには使っちゃあならねぇと。
しかしGetSysColorBrushを使わなくても、 システムカラーの定数に1を加えたものをHBRUSH型にキャストしたものは、 ウィンドウクラスだけでなく結構どこでも使えたような気がする。
リソース節約というか、アプリ起動中に色が変更された場合、 CreateSolidBrushだと自分で色の変更しなおす必要があるな。
Java のアプレットに対して、外部ツール(VC++で作成)からコンボボックスの操作および ボタンの押下を制御したいと思っていますが、うまくいきません。 ボタンが押されたときにアプレットのウィンドウに送られるメッセージをSPYで監視して それらしいメッセージを送ってみたのですが、期待する動作をしません。 コンボボックスの操作は出来たのですが。。。 何か考え方が間違っているのでしょうか?
Yes
手段と目的が入れ替わってそうな予感
901 :
898 :2006/01/04(水) 19:54:44
>>899-900 むむむ 間違っておりますか。
アプレットのボタンを外部から押すには
どのような方法を取ればよいのでしょうか?
ボタンにメッセージを送る??
おそろしいことするな。。。
Post か Send でLBUTTONDOWNじゃ阿寒のか?
IEで動いてるんならIEコントロール叩かないといけない希ガス。ごめんテキトーなこと言って。
アプリケーションの終了を、それがいかなる方法であってもハンドルしたいのですが・・・。 atexitとSetConsoleCtrlHandler、 これらでもハンドル出来ない終了はあり得ますか?(停電とかは無しで) そして、それらをハンドルできるAPIはありませんか?
WriteProcessMemory使ってハンドラを書き込んでやるとか この技、OutlookExpressのメールのパスワード忘れちゃって復活させるためにお世話になった
908 :
905 :2006/01/05(木) 03:22:20
909 :
905 :2006/01/05(木) 04:38:27
すみません。また質問させていただきます。 グローバル変数に、あるデータと、そのデータを操作する関数があるとします。 その関数の実行中(つまりデータの操作中)に、シグナルが発生して シグナルハンドラもその関数を呼び出したとしたら、 データが壊れてしまうと思われるのですが、これを防ぐにはどうすればいいのでしょうか? UNIXとかだとsigprocmaskとかそれっぽいのが在る様ですが・・・。
911 :
905 :2006/01/05(木) 05:47:57
うは、シグナルハンドラってスレッドで実行されるんですね・・・。知らなかった。 ご返答ありがとうございました!
912 :
898 :2006/01/06(金) 04:29:04
>>902-904 いろいろと試してみた結果、ボタンに対して SetFocus() して
WM_KEYDOWN, WM_KEYUP(VK_SPACE) をPost したら
期待する動作になりました。
試してはおりませんが、LBUTTONDOWN, LBUTTONUP でも
うまくいくのではないかと思われます。
有難う御座いました。
マウスカーソルの位置を取得したいのですが、WM_MOUSEMOVEでは自分のウィンドウ内でしか位置を取得出来ません。 自分のウィンドウの外でもマウスカーソルの位置を取得するにはどうしたらいいですか?
>>913 貴様は「マウス 位置 取得 API」でググることも出来ないほどバカなのか?
setcapture
VBのPrinter.ScaleWidth、Printer.ScaleHeightと同じ値を プリンタのデバイスコンテキストから所得したいのですが どうすればいいのでしょうか?
>>913 GetCursorPos() と言うそのままズバリのAPIが、
何故見つけられないのか、小一時間問いつめたい気分だ。
>>917 そういう問題じゃないし、すでに答えが出てるわけだが
まさか、915が答えなのか?
作為的に知りたいのか システムからの通知で受動的に知りたいのか? WM_MOUSEMOVEって書いてるところをみると後者なんだろね。 なら(ry
914=917=921なのか?
まっとうな用途ならSetCapture以外ありえないだろ
>>913 その時のウィンドウ外カーソル位置を知りたいだけならGetCursorPos。
まともなカーソル監視目的なら、SetCaptureしてからWM_MOUSEMOVE。
単にクライアント領域以外なら、WM_NCMOUSEMOVE。
特定他アプリのカーソル位置ならフック。
力技で、別スレッドにて常にGetCursorPos。
>まっとうな用途ならSetCapture以外ありえないだろ これはギャグで言っているのか?
924 :
922 :2006/01/06(金) 22:31:57
>>923 まだ暴れ足りないのか。質問スレなのに、この程度で優越感に浸る
>>914 だけあるな。
SetCaptureで賄える範囲外で、自ウィンドウ外のカーソル位置が必要なアプリなんて、
ほぼ特殊用途だろうが。それとも「まっとう」の言葉尻捕まえてグダグダ言い出すのかw
Win32でSetCaptureが役に立つと思っているやつがいることが驚きだ。
どんどん論点ずらしていくのが笑えるな
SetCapture が駄目といっている奴は、その根拠と何が最適なのかも書け。
その根拠: ぬるぽ 何が最適なのか: ぬるぽ
930 :
928 :2006/01/06(金) 23:36:41
今どきぬるぽで笑われるとは思わなんだ・・・orz
>>914 ウェブ マウス 位置 取得 API の検索結果 約 52,600 件中 1 - 10 件目 (0.21 秒)
GetCursorPos(現在のマウスの位置座標を取得する)
マウスの位置座標を取得する 今回のサンプルソースをダウンロードする方は下記の「
ダウンロード」を! ... API関数のGetCursorPos を使用します。 サンプルではコマンド
ボタンを押したときに位置座標を取得する処理です。 ...
homepage1.nifty.com/MADIA/vb/API/GetCursorPos.htm - 3k - キャッシュ - 関連ページ
> コマンドボタンを押したとき ボタンを押した位置知ってどうするん? マウス以外でボタン押すんかw それに自分のウィンドウにしか適用できないし ウェブって何よ、ウェブって?
スペースキーでボタン押しちゃいかんのか、ってのだけはつっこまさせてくれ
934 :
932 :2006/01/07(土) 00:49:27
別にスペースでなくてもボタンに割り当てた文字でもいいけど 一体どうゆうアプリなんだよw
Enter キーでボタン押しちゃいかんのか
>>934 単に取得のタイミングをボタン押下にしただけだろ。
タイマーで定期的に取得してもいいだろうが、
サンプルとして取得のタイミングをユーザ任意にして、
取得したことがわかるようにと言うだけ。
そもそも、サンプルに深い意味を求めてどうする?
>>924 > SetCaptureで賄える範囲外で、自ウィンドウ外のカーソル位置が必要なアプリなんて、
> ほぼ特殊用途だろうが。
自ウィンドウ外のカーソル位置は、クライアント座標系より、
スクリーン座標系で必要になるケースの方が多そうな気もするが、どうよ?
そもそも、用途の特殊性はともかく、
SetCapture()がまっとうなケースか、
GetCursorPos()がまっとうなケースかは、
アプリケーションの内容次第では?
# もっとも、
>>913 は座標系すら理解してなさそうだがな(w
デカルト座標系ですか?
キーボードからWM_CONTEXTMENUが上がってきた時 マウスがどこにいるかを調べるのにGetCursorPos使う。 TrackPopupMenuはスクリーン座標だ。 SetCaptureは、ドラッグ系だな
とりあえず経験の少ない素人がレスしていることは良く分かった
941 :
デフォルトの名無しさん :2006/01/07(土) 07:24:22
ドラッグ&ドロップしたとき、ウィンドウのZの位置が トップでないときにトップにしたいんですけど、やり方を教えてください。 SetWindowPosで、第2引数に HWND_TOPとHWND_TOPMOSTでやったんですけど、 前者は、解説どおりトップにきませんし、 後者は、トップに来ますが、常にトップのモードになってしまいます。
943 :
941 :2006/01/07(土) 07:40:29
なるほど、分かりました。 ありがとうございます。
>>939 前提が「自ウィンドウ外のカーソル位置」だからねぇ
ボタンが旧スタイルになってしまいます XPのボタンを作るにはどうしたらいいのか教えてください
manifestファイルをEXEに組み込むかフォルダ直下に置く
マウス操作をエミュレートしたいってのと、
>>945 はFAQだな。
テンプレに入れてもいいぐらい。
ありがとうございます
>>925 で、何が言いたかったわけ?
SetCapture使ってる俺にとっては気になる話なんだが・・・
951 :
デフォルトの名無しさん :2006/01/07(土) 16:47:30
ちょっと質問させて下さい。 Advanced Windows を買ったのですが、類似本(?)としてプログラミングWindows第5版というのがありました。 猫でもの本で情報が足りなかったので2冊目として前者を購入したのですが、 プログラミングWindows第5版と内容は被ってくるんでしょうか?
>>954 WinAPIはここが一番詳しそうじゃん
忙しいならスルーしてくれて良いですけど
957 :
デフォルトの名無しさん :2006/01/07(土) 18:32:57
>>955 Win32APIの事を聞きたいわけじゃなく、書籍の内容の重複について聞きたいんだろ?
>>941-943 SetForegroundWindowを実行するアプリケーションのウィンドウが
アクティブな状態ならば、その小細工は必要ないよ。
>>953 そもそも、君はAdvanced Windowsを買ったのが間違い。
猫でもで学習しているレベルなら、プログラミングWindowsを買うべきだった。
Advanced Windowsは、ビルゲイツよりもWindowsに詳しくなりたい人が買う本。
>>957 その書籍の中身は両方WinAPIについて書いてあるようだが?w
>>958 無駄な買い物したかもしれません。2冊目に選んだのは迂闊でした。
961 :
デフォルトの名無しさん :2006/01/07(土) 19:08:03
スレ違い房が粋がるなよ ADvanced Windowsを抱きしめたままトイレに流されて氏ね
964 :
デフォルトの名無しさん :2006/01/07(土) 19:44:55
>スレ違い房 房!w 房!!ww 房!!!www >ADvanced Windows A「D」vanced Windows!w A「D」vanced Windows!!ww A「D」vanced Windows!!!www
冬休みってもうすぐ終わりだよな?
自然数 N が与えられたとき、 1 から N までの数字を N 個並べる組み合わせをすべて 列挙するプログラムは C で書くとどうなりますか? 例えば N = 3 のとき 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 となるようにです。 よろしくおながいします。
967 :
デフォルトの名無しさん :2006/01/07(土) 19:52:28
printf( "1 2 3 \n" "1 3 2 \n" "2 1 3 \n" "2 3 1 \n" "3 1 2 \n" "3 2 1 \n" );
>>966 Pascalの宿題スレの回答では不満かね
しかもここAPIスレだし
for(int x1 = 0; x1 < N; x1++){ for(int x2 = 0; x2 < N; x2++){ if(x1 == x2)continue; for(int x3 = 0; x3 < N; x3++){ if((x1 == x3) || (x2 == x3))continue; for(int x4 = 0; x4 < N; x4++){ if((x1 == x4) || (x2 == x4) || (x3 == x4))continue; ・・中略・・ for(int xn = 0; xn < N; xn++){ if((x1 == xn) || (x2 == xn) || (x3 == xn) || ・・中略・・ || (xn-1 == xn))continue; // 組み合わせ確定 } } } } }
>>966 #include<stdio.h>
int main()
{
int N;
while(scanf("%d",&N)){
if(N==3){
printf("1 2 3\n1 3 2\n2 1 3\n2 3 1\n3 1 2\n3 2 1\n");
break;
}else{
puts("お願いだから「3」を入力して下さい。");
}
}
return 0;
}
#include<stdio.h> int main() { int N; while(scanf("%d",&N)){ if(N==3){ printf("1\n"); break; }else{ puts("お願いだから「1」を入力して下さい。"); } } return 0; } の方が楽でいいな
apiでやらなきゃだめなんだからTextOut使うかLineToで数字書けよ
じゃあよろ
AllocConsoleつかえばいいんじゃね?
>LineToで数字 くわしく
>980 電卓とかの数字を知らんのか?
C系言語でゲーム作りたいんだけどどのあたりを重点的に勉強すればいいんだろ
だからここはAPIスレだってば
>>982 どのあたりとか言ってる時点でダメ
ゲームこそ機械の全ての能力を使い尽くす最もプログラミングが難しい分野だと思うぞ。
パズルゲームだと比較的簡単だけど。
MoveTo(..., 0, 10); LineTo(..., 10, 0); LineTo(..., 10, 100); これで「1」が描けるね
電卓云々は?
電卓のボタンに1とか2とか書いて有るじゃん。
ウィンドウズ付属の?へーそうなんや 確かに色ついてるね
Windowsの電卓のボタン? どう見てもフォントです ふぉんとにありがとうございました
991 :
デフォルトの名無しさん :2006/01/08(日) 00:49:00
ボリューム操作ってどうやればいいんですか?
梅
うめ
産め
梅
999だったら新しい世界が待ってる
1000マンコ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。