1 :
東トルキスタンと言ってみるテスト :
2005/11/13(日) 21:29:51 スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。
過去スレ、関連リンクは
>>2-5 くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(
http://msdn.microsoft.com )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvencedWindowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで。
∧_∧ ( ´∀`) < 0x25
>マルチメディアタイマーは割り込みじゃなくてコールバック。
>詳しくは知らないが、
>>995 みたいなビジーループ回してるんじゃないかな?
CPU1つしかないのにビジーループでなんてどうやってまわすの?
そんなことやったら、精度が10msで測ったらどっかで止まるよね?
>>6 そのようなことを不思議に思うのであれば、
OSがms単位以下で各スレッドにタイムスライスを分配することも不思議に思うべきではないか?
>>7 だから、やってねぇんだよ、そんなことは。
ビジーループでなんてまわしてねぇの。
あるフォルダ内のファイル名をパス付きでリストとして得たいのですが、どの辺 のAPIを調べたら良いでしょうか?
>>6 ビジーループの話なら、回せるからプリエンプティブマルチタスクって言うんだよ。
マルチメディアタイマーの話は、書いた通り、詳しくは知らん。知ってる奴解説よろ。
>>14 そうだね。
結局、OSレベルでの実装じゃその切り替えもメッセージでやるしかない。
>>14 は?
1CPUで本当の並列処理しないと「プリエンプティブ」でないと言うつもりなら、
世の中にはプリエンプティブマルチタスクなOSは存在しないないことになるんだが?
>>16 いやいや、プリエンプティブかどうかってところは争ってないでしょ?
よく読まないと無駄な論争することになるよ。
メッセージ厨が湧いているようだな(w CriticalSectionやらFiberやら知らんのだろうな、こういう厨は。
>>17 すまん、さっき酒入れたもんで。
メッセージ経由だとマルチメディアタイマーの精度が生きない気がするけどなあ。
まあエロイ人に任せて寝る。
>>19 >マルチメディアタイマーの精度が生きない気がするけどなあ
で、実際生きてねーじゃんw
どないなっとんねん>MS
って話なわけよw
>>20 は本物の厨なのか・・・。哀れになってきた。
マルチメディアタイマとWM_TIMERタイマの区別ができてない人が滞在するスレはここですか?
20は何を言ってるんだ? マイクロ秒まで測れるなら十分だと思うが
いや、パフォーマンスカウンターはタイマじゃないから。
マルチメディアタイマに対応してないマザーボードは多いから 配布するソフトには向いてないね
>>26 今世紀に出たマザーで対応してないのあったら、1つでいいから
実例を挙げてくれ。
まあしかし、いずれにしろ現在時刻を_やμ秒の精度で取得するのは無理ってことだな。
よし、じゃあナノ秒で取得しよう
エロゲープログラマの権威はポーリングをすすめてたよ
>>23 でも、実際そんなことできてないじゃん。
やってみ?できないから。
だとしてもその理由はマルチメディアタイマがメッセージベースだからではない
( ゚д゚)ポーリング
何だか時刻計取得と、定周期実行の話が混ざってるような。
おまいらまだやってたんかい
ちょっと質問なんですが、WinAPIで文字列を表示するときに LPTSTR ctStr = TEXT("あいうえおabcかきくけこdefさしすせそght"); DrawText(hdc , ctStr , -1 , &rect , DT_CENTER | DT_WORDBREAK ); でも char *ctStr = TEXT("あいうえおabcかきくけこdefさしすせそght"); DrawText(hdc , ctStr , -1 , &rect , DT_CENTER | DT_WORDBREAK ); でも、クライアントエリアに表示されるのはどちらもきちんと あいうえおabcかきくけこdefさしすせそght と表示されます。 自分の認識としては、char*で表示させると2バイト文字は文字化けしてでると思っていたのですが どうしてきちんと表示されるのでしょうか? もしどちらでもいいのであれば、LPCTSTRなどの存在する意味が分からないのですが…。
>>37 _UNICODEやUNICODEを#defineしてない場合はその二つは同じ物だ
同じ結果になるのは当たり前
char型がそもそも文字を扱うための型なのだから、それで文字化けしたらおおごとだよ
charはシングルバイト文字を扱うための型で、それ以上でもそれ以下でもない
一方LPCTSTRは、プリプロセッサの定義でchar*型とwchar_t*型のどちらかになる
char *ctStr = TEXT(" ")としていて、UNICODEを使おうとした場合型が違うとエラーが出るが
LPCTSTR ctStr = TEXT(" ")とすれば、UNICODEでもANSIでもエラー無く使える
汎用性の問題だな
wide character stringはstrのn文字目にアクセスするのに常にstr[n]でいけると思ってるような、 一生multi byte character stringなんか目にすることのない馬鹿な欧米人プログラマでも多言語 対応プログラムが書けるようにするためにある。
38,39さんどうもです。 すみません。UNICODEで書くとは具体的にどういったことをいうのでしょうか。 #define UNICODEとすれば、TEXT("")の文字列は全てUNICODEになるという解釈でよろしいのですか? 例えば、<window.h>の上に#define UNICODEとすれば、文字列は全てUNICODEとして扱われる といったかんじなんでしょうか。 あと汎用的ということなのでVC++使ってみました。 しかしながらPCTSTR ctSrt = TEXT("")でビルドすると PCTSTRは定義されていません。とエラーが出ます。 インクルードファイルは、<windows.h>と<stdio.h>の二つです。 <window.h>でPCTSTRは通ると思ったのですが、これはUNICODEの定義と何らかの関係があるのでしょうか。 ヘルプにはPCTSTRはUNICODEが定義してあると、PCWSTRそうでないとPCSTRになると解釈したのですが…。
SetFocus(hwnd)命令についての質問です。 この命令は、既にhwndにフォーカスがある場合はWM_SETFOCUSメッセージを生成しない のでしょうか。検証しているプログラムの挙動を見る限りそうではないかと思うのですが、 MSDNライブラリ等にはそのような記述が見あたりませんでした。よろしくおねがいします。
42 :
デフォルトの名無しさん :2005/11/14(月) 12:18:02
現在ソケットプログラム勉強中なのですが、ローカルなネットワーク(192.168.0.XX)のような のではなく、グローバルなネットワーク(インターネット側から見たアドレス)を取得したいのですが、 解決方法をどなたかご存知ありませんか。自分のアドレスをインタネット側からみたIPアドレスを知りたいのですが。。 環境はVC.net + SDKです。
>>40 アホすぎる
掲示板で説明するのは面倒すぎるから本でも探して自分で勉強しろ
ルータ等でNAPTのようなアドレス変換を行っている環境の話ならインターネット上のホスト(ex.確認君)に聞くか、さもなくば変換を行っているルータ自身に聞くしかない。
45 :
デフォルトの名無しさん :2005/11/14(月) 12:46:12
>>44 返信ありがとうございます。
たとえば、インターネット側にあるサーバー(
http:// ○○○.ne.jp)とかならサーバーに繋いだ際、
クライアント(インターネット側)アドレスは知る命令はご存知ありませんか。初歩的な質問ですみません。
46 :
デフォルトの名無しさん :2005/11/14(月) 12:50:03
>>44 うわ・・。すみません。わかりました。。
ちょっと記憶が混乱してるみたいです。listen関数のアドレスもらえばいいだけですね。。
すみません。。
>>43 すみませんでした。あきらめたいと思います。
諦めるようじゃそもそもだめだな
50 :
デフォルトの名無しさん :2005/11/14(月) 15:48:45
すみません、ファイル一覧に関してです。 任意のディレクトリに存在する、ファイルの一覧(サブディレクトリなども含んでも良い)を取得したいのですけど。 MSはこのような要求を満たすAPIは提供しているのでしょうか
あらやだorz
53 :
デフォルトの名無しさん :2005/11/14(月) 18:18:10
質問です。 文字の選択後に右クリックで、以下の部分に自作のアプリを埋め込んで選択肢に入れたいのですが ググル先生やMSDNでAPIを調べてもとんと分かりません。調べる単語がわからないので助けて下さい 切り取り コピー 貼り付け すべて選択 ---------- ぬるぽ Google検索
54 :
デフォルトの名無しさん :2005/11/14(月) 18:24:36
レジストリで設定するのかな?
55 :
デフォルトの名無しさん :2005/11/14(月) 18:32:53
只のTrackPopupMenue()なら作れるんだけど
56 :
デフォルトの名無しさん :2005/11/14(月) 18:38:51
Menue
nるぽ
58 :
デフォルトの名無しさん :2005/11/14(月) 18:41:13
ググル先生はどうやってIEのMenueをいじったのか教えてください
59 :
デフォルトの名無しさん :2005/11/14(月) 18:43:19
ぬるぽワッショイ!! \\ ぬるぽワッショイ!! // + + \\ ぬるぽワッショイ!!/+ + . + /■\ /■\ /■\ + ( ´∀`∩(´∀`∩)( ´ー`) + (( (つ ノ(つ 丿(つ つ )) + ヽ ( ノ ( ヽノ ) ) ) (_)し' し(_) (_)_)
>>53 何の文字列を選択して右クリックなんだ?
自作アプリで表示してる文字列なら自分で出す必要があるし、
そうでないならそのアプリ次第。
一般的な方法なんてない。
>>60 .htmlをInternet Explorerで開いたときの、反転した文字列でつ
諦めろ
>>60 レスありがとうございました。
IEはやめときます。猫でも〜のテキストエディタでtryしてみます
質問させてください。 ポップアップメニューを表示する際に、状況によって メニューの文字列の一部を置き換えたいと思っています。 例えば %1を削除 → ファイルAを削除 のように。 現在、ON_UPDATE_COMMAND_UI() と CCmdUI を用いていますが、 元の文字列を取得するメソッドがありません。 CCmdUI::m_pMenu を使おうとしましたがこれは NULL になっていました。 これを実現するにはどうするのが正しいのでしょうか。
自分で設定したものなのに自分で分からないとはこれ如何に
どうしようもないな
ライパンコ使った?
69 :
64 :2005/11/14(月) 20:01:00
>>65 私へのレスでしょうか?
メニューはリソースで定義されているものを表示しています。
折角 ON_UPDATE_COMMAND_UI によってリソース定義とイベント処理が分離されているのですから、
イベント処理からリソースを読むということはあまりしたくありません。
別の意味だったらすみません。
71 :
デフォルトの名無しさん :2005/11/14(月) 20:41:53
>>53 ウィンドウをフックしろ hook windows
73 :
72 :2005/11/14(月) 20:53:26
ゴメンなんでもない ちょっと寝ぼけてた 変更後も元の値を知りたいのであれば、別のところに保存しておくしかないだろう
>>64 SetMenuStringとかじゃないのか?
で、英語勉強したのか?
SetMenuItemStringだったりして
76 :
64 :2005/11/14(月) 21:23:58
すみません、置き換えをした後で置き換え前の文字列が欲しいという意味ではなくて、 そもそも置き換えをするためのベースの文字列が欲しいということです。 それともうひとつすみません、勘違いしていました。 今手元の環境でテストしてみたところ、 CCmdUI::m_pMenu が NULL になるのはメニューがクリックされた時に呼ばれる場合で、 メニューが表示される前に呼ばれる場合はちゃんと値が入っていました。 そこで void CMenuTestApp::OnUpdateEditTest(CCmdUI* pCmdUI) { if(pCmdUI->m_pMenu) { CString str; pCmdUI->m_pMenu->GetMenuString(pCmdUI->m_nID, str, 0); str.Replace(_T("%1"), _T("ファイルA")); pCmdUI->SetText(str.GetString()); } } のようにしたらうまくいきました。 お騒がせしました。
>>68 >>71 両氏の技を今勉強しています。
レス有難うございます。なんだか楽しいです^^
>>33 ポーリングなんて半端じゃなく時間のかかるものやってるわけないだろwアホかw
>>80 俺はタイマは一定時間毎に取得してるだけだと思うけどな。
あ、つまりポーリングだと思う。
84 :
デフォルトの名無しさん :2005/11/14(月) 21:52:51
ボーリングってあのボーリング?ストライクとかスペアとかあるやつ?
jpgにしてきたのか
>>85 ボーリングは穴掘り
玉転がしはボウリング
MAX_PATH って何文字でしょうか? printfさせてみようと思って %d に渡したら、int から const char* に変換できませんと怒られてしまう…
260だが。そのエラーになるprintfのコードはちょっと気になる。
93 :
91 :2005/11/14(月) 23:32:26
>>92 ありがとうございます。
後になって気づいたのですが、printfを使った自作のマクロが腐っていたのに気づきました。確認できました。すみません。
>>91 MAX_PATHをGREPで検索するだけでいいんジャマイカ?
95 :
デフォルトの名無しさん :2005/11/15(火) 00:39:25
?
馬鹿が馬鹿を論破して自慢したがってるんだろ? ほっとけ。
正直2ちゃんってレスポンスがいいだけだよね 急ぎじゃなけりゃ他で聞いたほうがマシだよ質問者の皆さん くだらない煽りとかネタとかのが多いし
Windows上でIPv6に対応したLinuxのようなtraceroute(UDP撃ってICMP受ける)を作りたいのですが、 IPv4はできたのですが、IPv6がうまいこといきません。 WinsockでIPv6のRAWモードソケットってちゃんと使えるのでしょうか? やっぱりWinPCapが必要なのかな...
質問です。 ShiftJISの文字列から、第一水準・第二水準以外の文字コード (機種依存文字・第三水準・第四水準・補助漢字・外字等) を削除したいのです(契約しているフォントの問題)。 適切なAPI、もしくは何かうまい判定方法はありますでしょうか? 対象はWindows98以降、開発環境はVC++2003です。
急ぎでも他の方がいいと思うんだけど。
>>100 区点コードに直してから判定するといいかと。
マルチスレッドプログラムの排他制御について質問があるんですが、 glb_mutex = CreateMutex(NULL, FALSE, L"mumu"); としてミューテックスハンドルをグローバル変数にして 各スレッドでWaitForSingleObject(glb_mutex, INFINITE), ReleaseMutex(glb_mutex); としても合法でしょうか? それとも各スレッドごとにOpenMutex()として別々に ミューテックスハンドルを作成してやる必要があるのでしょうか?
>>105 同期オブジェクトはプロセス内ならどのスレッドでも使えるよ。
つーかスレッド間同期のためにあるんだから使えて当然。
つか、単一プロセスで完結する同期に名前つきオブジェクト使うなよ
プッ
109 :
デフォルトの名無しさん :2005/11/15(火) 11:42:46
質問なのですが、お願いします。 今、リストビューのLVS_OWNERDRAWFIXEDを使ってDRAWITEMしてるのですが、 ディバイダー(カラム)のサイズを変更すると再描画が起こるのは分かりますが、 どうしてもちらついてしまいます。 LVS_OWNERDRAWFIXEDを知っている方で、ディバイダーのサイズを変更しても ちらつかない方法を知ってる方いませんか。 WM_ERASEBKGNDや、知ってるかぎり やってみたのですが。。
110 :
109 :2005/11/15(火) 11:44:47
環境は、VC.net + SDK です。 よろしくお願いします。
>>109 WS_CLIPSIBLINGSをウィンドウスタイルに加えたらどう?
112 :
105 :2005/11/15(火) 11:51:23
皆さんすばやいレスありがとうございました。 今までReleaseMutex(glb_mutex)を呼び出すと WaitForSingleObject()を呼んでいても GetLastError()が288を返してきていたので この原因はグローバル変数にあるかと思っていましたが、 そうでないとわかり安心しました。 CreateMutex()自体は成功していました。 実はWaitForSingleObject()が WAIT_ABANDONED WAIT_OBJECT_0 WAIT_TIMEOUT のいずれかを返すものとして考えていたのですが、 WAIT_FAILEDを返す場合もあるとわかったので こちらが返されていないか調べるようにします。 今は実験できる環境にいませんが試してから報告に来ます。 ではでは、
113 :
109 :2005/11/15(火) 11:54:40
114 :
109 :2005/11/15(火) 11:56:50
あっ。ちらついているのは、ディバイダー(カラム)ではなくて、リストビューのアイテム郡です。。 ちらつきを取るのは難しいです。。
それは無理だろう。 描画を全部カスタムドローで管理しても取れるかどうか。
描画を全部自前にしてダブルバッファリング
質問です。 GNUのLibiconvをVB6.0から利用できるようにしたいのだが、 stdcallでないために使用できないらしい。 ソースをなおしてみようかと思ったんだが、どう手をつけていいか.. 教えてエロ(ry
>>117 stdcallにするだけなら楽だが、iconv()はエラー通知用にerrnoを使用するし
引数もダブルポインタがあったりしてアレなので、
どのみちそのままではVBから使うには不適当。
VB用にラッパー関数を書くんだね。
ていうかiconv()ポートせんでも MlangのConvertINetString()でいいんじゃないかな。 IEの文字コード変換機能がそのまま使えるよ。 日本語エンコーディングのAutodetectも利用できる(IEが出来るんだから当然だが)
日本語入力時の入力キーと打鍵時間を記録するプログラムを書いているのですが、 WM_KEYDOWN上でログを取ろうとすると、 時間は取れるのですが、wParamの中身が入力内容として使えません。 (何を入力しても0xE5が飛んでくる) WM_CHARやWM_IME_CHARでは確定後にまとめて情報が来るため、 BSキーなどで修正をした場合、そこの入力が無視されてしまいます。 (実のところ、そのローマ字入力を修正した部分周りの情報が欲しいです) ローマ字入力中の打鍵列をリアルタイムに取得するには 何かいい方法はないでしょうか。
日本語入力中はIMEがWM_KEYDOWNの情報を書き換えてしまうから フックをかけてIMEより先に情報を取得するのがいいんじゃね? IMEより上位にフックできるのか試してないからわからんが
ImmGetVirtualKey
123 :
121 :2005/11/15(火) 17:18:05
そんな関数があったのか
>>121-123 ありがとうございます!
MSDNで早速調べてみたところ、まさにそのまんまの関数でした。
ただ、返り値が元の仮想キーコードとなるとあったのですが
if(wp == VK_PROCESSKEY){
printf("keycode: %x\n", ImmGetVirtualKey(hWnd));
}
としてクイックコンソールで確認してみたところ、
依然として0xE5が出力されてくれます( 'A`)
イージーミスの可能性もあるので、もうちょっと色々試してみます。
本当にありがとうございました。
125 :
117 :2005/11/15(火) 17:41:00
>>118-119 mlangのConvertINetStringから、ADODBのStreamにまで流れ着きました。('A`)
おかげでできました。d
>>124 if(wp == VK_PROCESSKEY){
printf("keycode: %x\n", MapVirtualKey(LOBYTE(HIWORD(lParam)),1));
}
こんなんでもいいみたい。
127 :
デフォルトの名無しさん :2005/11/15(火) 18:14:25
memsetのWin32SDK版は何ですか? もち、TCHAR対応で
>>126 ありがとうございます、そっちの方法だと行けました!
ImmGetVirtualKey()が成功しなかった理由はまだちょっと判らないですが、
コレ使って何とか先に進めそうです。
助かりました。
>>127 memset()は文字列を扱うための関数ではありませんが。
>>127 VC++のCランタイムにはwmemsetもあるが129の理由でTCHAR版はない。
自分でマクロ作れ。
あるいはC++なら<algorithm>のstd::copyも使える。
>grep memset string.h File string.h: _CRTIMP void * __cdecl memset(void *, int, size_t); void * __cdecl memset(void *, int, size_t);
>>131 wmemsetは<wchar_t.h>
つーか、string.hだからなんだって言うんだ?w
少なくともwin32apiで無いことはわかるな。
VOID FillMemory ( PVOID Destination, // メモリブロック SIZE_T Length, // メモリブロックのサイズ BYTE Fill // 書き込みたい値 ); つーのはあるけどな。
>>135 でもTCHARでないから127の希望とは違うだろうな。
それがAPIにある必然性は感じないな。
みんな「な。」で終わってるな。
どうせ中でmemset呼んでるだけだろうしな。
そもそもmemsetみたいな関数がTCHARを引数に取ることがありえないと思うな。
でも、memsetとwmemsetがあって_tmemset?が無いのも、「あれ?」と思うな。
CopyMemory,MoveMemory,FillMemory,ZeroMemoryあたりはともかくSecureZeroMemoryは覚えておこうな。
>>140 正解。マクロでmemsetになる。
一応kernel32にRtlFillMemoryのエントリポイントもあるけどな。
お前ら、もうその話はするな。
>138をスルーしつつ、スタイルは踏襲しているんだな。
PSDKのSecureZeroMemory()の実装を以下に示す。 ---winnt.h--- FORCEINLINE PVOID RtlSecureZeroMemory( IN PVOID ptr, IN SIZE_T cnt ) { volatile char *vptr = (volatile char *)ptr; while (cnt) { *vptr = 0; vptr++; cnt--; } return ptr; } ---winbase.h--- #define SecureZeroMemory RtlSecureZeroMemory
あきまへんがな。
普段から空気の読めないやつと言われているんだろうな。
お前らいい加減にしろよな。
お、おこられちゃったんだな。
154 :
デフォルトの名無しさん :2005/11/15(火) 22:04:29
お前ら、
>>146 のリンク先は必ず読んでおけ。
memset() の最適化処理に伴う予期しない最適化について記述されている。
>>146 のリンク先の一番下のヤツはどこが欠陥なの?
な。
事情通を気取った
>>143 が赤っ恥をかいたのは気の毒だが、
みんなの知識向上に寄与したから誉めてやってもいいと思う。
157 :
デフォルトの名無しさん :2005/11/15(火) 22:40:05
ななななななななななななななななななななななななな
「な」じゃなくて「な。」なんだな。
>>146 >これはオプティマイザのバグだ!と叫んで通りに飛び出すのはちょっと待ってください。
ちょっとワロタ
160 :
デフォルトの名無しさん :2005/11/15(火) 23:29:33
>>87 ありがとう^^^^^^^^^^^^^^^
>>159 今度、リリースビルドしたら動作しなくなったとかいう質問者に言ってみるよ!
ま た グ ラ デ 厨 か
オーナードロー
オーナードローじゃないよ 真ん中や下の奴はvisual styleで定義されたグラフィカルな色合い だからvisual styleを変更すれば別のグラフィカルな色合いになる
いや、ネタだったんだが。
.__ ヽ|・∀・|ノ |__| | | 調子 調子 調子 調子 調子 調子 調子 調子 調子 調子
カスがカスって言っても説得力無いよ
>>169 わかったからさっさと答えろや(^o^)
あんまり調子こいてるとアクセス禁止にして貰うぞ
172 :
168 :2005/11/16(水) 07:48:58
さっさと答えろや雑魚ども(^o^)
win32apiとwindows sdkとplatform sdkの違いが分からないのだが誰か教えて
windows sdkなんぞ聞いたこともない
>>175 char[]に格納したときに消費するメモリの大きさが違う
sdk の検索結果のうち 日本語のページ 約 842,000 件中 1 - 10 件目 (0.29 秒) SDKとは 【Software Development Kit】 ─ 意味・解説 : IT用語辞典 e ... SDKをさらに検索. 全文検索 ・ 関連ニュース検索. SDK. あるテクノロジー(プログラミング 言語やAPIな ど)を利用してソフトウェアを開発する際に必要なツールのセット。 フルスペル :, Software Development Kit. IT派遣情報, ITエンジニア派遣なら ... e-words.jp/w/SDK.html - 関連ページ
180 :
デフォルトの名無しさん :2005/11/16(水) 13:54:12
実行ファイルのプロパティの「互換モード」の影響を受けずに OSの情報を取得する方法があれば教えてください。 互換モードで起動するとGetVersionEx()で取得される情報も変更されてしまいます。
>>180 9xとNT系の区別だけでいいなら、GetSystemDirectory()で取得した文字列から泥臭く判断するのはどう?
182 :
181 :2005/11/16(水) 14:07:02
あ、
>>181 だとXPがダメだ。
デスクトップのパスで判断するとか。
SHGetSpecialFolderPath(NULL, buffer, CSIDL_DESKTOPDIRECTORY, FALSE);
version.dllのバージョン情報読むってのはダメか? それすら騙されるなら、ファイルとして読み込んで自己解析とか。
184 :
デフォルトの名無しさん :2005/11/16(水) 14:52:36
LPARAM型ってDWORDのポインタでしょうか・・すみません
>>184 LPARAM は LPARAM だしょ
ううん、質問が悪かったです。 WPARAM型は(私の環境では)32bit変数(DWORD型と同じ) LPARAM型は・・? てな具合です。
File WTypes.h: typedef LONG_PTR LPARAM; typedef long LONG; File wmsstd.h: typedef LONG LONG_PTR;
ヘッダファイルを読めばわかる・・・かも 32ビットでしょ
>>186 どっちも単なる32bitのメモリ。
好きに使えばいい。
ただ、LPARAMは、何かのポインタを入れるのに使うことが多い、
というだけ。
たとえば
WM_CREATEのLPARAMは、CREATESTRUCT構造体へのポインタ
WM_NOTIFYのLPARAMは、NMHDR構造体へのポインタ
わざわざ有り難うございます・・ 今さっきも*lParamとしたのですが、無効な参照と吐いてくれたので。 すみませんでした
191 :
189 :2005/11/16(水) 15:07:55
>>186 もちろん、いま32bitというだけであって、
将来、MSは変える可能性があるから、絶対に32bitだとするのはあれだけど。
(まあ、互換性を考えるとまずない)
今、というかx64 Editionなら64bitにもうなってるんじゃ?
>>191 新しいヘッダファイルでは、
既に、64bitに対応できる定義に変わってるけど
すでにWPARAMという名で32bitなわけだし。
>>194 名前は16bitだと思うが‥‥
Word: 16bit
DoubleWord: 32bit
QuadWord: 64bit
>>195 も間違い。
以下は、MSDNの「データ型」(MFCの関連ページ)から
WPARAM
ウィンドウ プロシージャまたはコールバック関数への引数として渡される値。
Windows Versions 3.0 と 3.1 では 16 ビット値、Win32 では 32 ビット値。
LPARAM
ウィンドウ プロシージャまたはコールバック関数の引数として渡される 32 ビット値。
いや別に間違ってはないだろ 「名前は」16bitだっつってんだから>WORD Parameter
16bitOSから32bitOSになった時点で、 WORDという表現が紛らわしくなっただけでしょ
>>198 16bitだろうが、32bitだろうが、よほど偏屈なマイナー仕様のシステムでない
限り、WORDは16ビットだが?
intのサイズが未定義(環境依存)なのと区別ついてねぇんじゃないか?
200 :
180 :2005/11/16(水) 16:49:53
>>181-183 やはり、そういう裏ワザ的手法になってしまうんですね…。
みなさんのご助言をもとにいろいろ試行錯誤してみます。
どうもありがとうございました。
なぜ195が194にレスしているのかが分からない 同じ事言っているのに
同じだよ
>>202 すでにWPARAMという(16bitの)名で32bitなわけだし(いまさら拘ることはない)。
読解力無いな195も196も
ゆとり世代はもう一度小学生からやり直したほうがいいな
64bit Windowsの場合はどうなんだろうな
207 :
デフォルトの名無しさん :2005/11/16(水) 22:03:36
質問です。ツールチップを表示しっぱなしにする方法がありましたら教えてください。 TTM_SETDELAYTIMEでTTDT_AUTOPOPを指定すれば時間を変更できますが、 最大30秒ちょっとしか表示を持続させることができないようなので・・・。
自分でウィンドウ作って表示したほうがはやくね?
>>207 それおれもわからんかった
しょうがないから最大30秒で我慢してるw
210 :
209 :2005/11/16(水) 22:19:28
TOOLTIPのウィンドウをサブクラス化して 30秒を測ってると思われるWM_TIMERあたりのメッセージを横取りすれば 持続して表示できるかもしれないが、そこまで試さなかったw
Janeとか専用ブラウザが実現してるな
212 :
デフォルトの名無しさん :2005/11/16(水) 22:27:07
こんばんは、よろしくお願いします。 win32sdkです。 ダイアログボックスに、エディットコントロールを貼り付けていますが、 英数と、.コンマのみ入力にしたいのですが、 ime の変更を行いたいと思っています。 どのイベントにそれを書き込むのかが分かりません。 教えてください hlmc = ImmGetContext(hwnd); ImmGetConversionStatus(hlmc,&dwConv,&dwSent); ImmSetConversionStatus(hlmc,IME_CMODE_FULLSHAPE, dwSent); 上記かきこもうとおもっています。
昭和生まれださい
ゆとり世代は(・∀・)カエレ!
昭和生まれはジャガイモでも食ってろ
昭和生まれと平成生まれの関係って韓国と日本の関係に似てるよね 韓国:日本=昭和生まれ:平成生まれ
this thread 面白いne☆
スレッド関数は見つかったのですが、レス関数が見つかりません
218's response 面白いne☆
CreateDIBSectionで確保した描画メモリを memcpy辺りでガッと初期化しようと思っているのですが、 1列の最後尾にゴミが無いってのは保証されてましたっけ? 古き良きDirectDrawの描画メモリと記憶が混在してしまって
221 :
207 :2005/11/16(水) 23:02:00
>>208-211 やはり標準的な手法は存在しないんですね。
自前の表示とサブクラス化、両方を検討してみます。
ありがとうございました。
あるアプリの特定のウィンドウの内容を自分のウィンドウにビットマップコピーしたい場合、コピー元のアプリを表示させずに コピってくる方法ないですか?スクリーン上では見えない座標にコピー元を移動したりと色々試したけど、WM_PAINTが発生しないから ハードコピーしても期待したDCのビットマップが取得できないんですよね。無理?
223 :
222 :2005/11/17(木) 00:04:44
あ、WM_PAINT飛ばしてみればいいのか。。やってみます。
>>223 まぁ、無理だと思うよ。
タスクマネージャなどの最前面アプリのしたにいるウィンドウや、
モニタから見切れているウィンドウで試せば判るが、理論DCを取得することは不可能。
225 :
224 :2005/11/17(木) 00:19:24
誤爆でした
>>224 おっしゃる通りだめでした。FindWindow()で見つけたウィンドウに対してInvalidate()とUpdateWindow()呼んだけど×。
本当はOLEで自アプリに埋め込みたいのですが、OLEで埋め込むと必要ない部品までくっついてきてしまうので…
メインウィンドウの画面イメージだけ欲しいんですよね。このような要件を満たすことはできないですかね?
>>225 うっそー誤爆なん!?w あまりにもタイムリー
228 :
224 :2005/11/17(木) 00:25:04
不可能じゃないし
230 :
226 :2005/11/17(木) 00:43:22
内緒(はぁと
>>174 OpenThemeData試したけど無理だったよ(^o^)
詳しく教えてよー(^o^)
>>232 礼の一言も言えねぇガキに教えてやるほど俺はヒマじゃねぇ。
他の優しいお方にでも頼め。
>^^^^^^^^^^^^^^^ >(^o^) コレウザイ
236 :
デフォルトの名無しさん :2005/11/17(木) 04:04:15
DLL内で作成したウィンドウの表示内容を、MDIウィンドウのビューに貼り付けたいのですが、どこから手を付けていいか解からず、困っています。 とりあえず、DLLのウィンドウ作成メッセージをフックするところから調べていますが、正しいのでしょうか? ご教授お願いします
238 :
デフォルトの名無しさん :2005/11/17(木) 05:16:02
239 :
デフォルトの名無しさん :2005/11/17(木) 09:14:17
もうお前らいいです(^o^) 雑魚ばっかだな(^o^)
ピザでも食ってろ(^o^)
VS2005にあわせて、そろそろPlatform SDKの更新こねーかなー。 ヘルプブラウザ(dexplore.exe)がVS2005の世代のになればいーなー。
243 :
デフォルトの名無しさん :2005/11/17(木) 15:50:57
C/C++室の方から移住してきたんですけど、codepageでUTF-8って使えますか?setlocaleでセットできるのでしょうか? ファイルパスをUTF-8で渡してくるアプリの移植で困っていまして。 できないならファイル操作のところでUTF16に自力変換してwopenとか*W系APIとかを自力で呼び出そうかと考えているのですが。
WideCharToMultiByte(CP_UTF8,...)
247 :
245 :2005/11/17(木) 18:58:16
MSLUはまぁ基本的に役に立たない。
>>249 streamの中身がwcharなだけなんですね。
C++初心者ですが、ヘッダファイルとGoogle様を参考にしてがんばって自分で作ってみます。
9x系は切捨ての方向でいきたいと思います。
今のままでもマルチバイトなファイル名がぶっこわれることがあるだけで、使えないわけじゃないし。
どうもありがとうございました。
>>250 書き忘れたが、
wstream類も入出力先(ファイルなど)ではマルチバイト文字で、
入出力時にワイド文字へ変換しているからな。
>>251 ありがとうございます。
その書き込みで気がついたのですが、データはANSI(UTF-8)のまま読み書きしなきゃいけないのでした。本家がデータはすべてUTF8で扱う方針のようですので。
とりあえずUTF-8ならASCIIと衝突することがないだろうという適当な方法ではあるのですが、国際化なんてほとんどそんなもんですよね。
C++/C室の方には書いたのですが、ファイル名をUTF8で渡すと壊れる文字があるのです。
bash+cygwin,MinGW,VC7&6のどれも同じように壊れるんで、libcrtかWin32APIのどちらかが悪さしてるみたいですが、そのへんを深く追求するのはやめました。
とりあえずファイルパスを扱う部分だけUTF16化して、適時変換を噛ませればよいかな、と。
9x系はどうしようもないですねぇ。
ファイル名をUnicode化せずにファイル内部にUTF-8なファイル名を持たせればASCIIでもいけるのですが、それだと手間が大きすぎますし…
>>252 きっとまずいのはWinAPIだ。
CRTはおそらくファイル名の文字列に手を加えていないと思われるので、
WinAPIに原因がある。もちろん単にファイル名をUTF-8では受け付けない仕様で、
WinAPIには何の非もないのだが。
>>248 でも、ないよりはましじゃね?
ちょっとした物ならこれで十分なこともあるし。
>>245 俺も詳しいことは知らんが、LCIDとCodePageは分けて考えたほうが良いと思うな。
setlocale()やSetLocaleInfo()等で設定するのはLCID。で、Language Identifier
に紐づいているCodePage(エンコーディング)が自動的に設定されるんだと思う。
日本語なら932、という風にな。
VC++のヘルプにはsetlocale()で設定可能な言語識別文字列が載っているが、
そこにはUTF-8は無いし、OSレベルのLanguage Identifierにも無い。
から、「設定できない」と考えるべきだろう。
GetACP()があるんだから、SetACP()のような、エンコーディングだけ指定できる
APIがあると良かったんだがな。
>>252 Windows APIでANSI文字列(char*)を渡したときは、ACPでエンコードされていると
仮定される。何もしなければそれは932だから、UTF-8文字列なんぞ食わせりゃ
問題が生じて当然だな。
で、上で述べたようにACPをUTF-8に変更する方法はどうもなさそうだから、
やはりWCSに変換してW版のAPIを呼ぶのが一番穏当だろう。
9x系がどうしようもないのは確か。
_tsetlocale() の影響下にある各種Cライブラリ関数は、 Win32APIの同機能に比べて低速なので期待したほど使えない。 多くの人は、_tcsicmp() を使うくらいなら、Win32APIの lstrcmpi() を使う。
257 :
デフォルトの名無しさん :2005/11/18(金) 05:41:02
メニューバーとツールバーにヴィジュアルスタイルを適用する方法を教えてください お願いします お願いします .manifestファイルおいても適用されません このとおりです
258 :
243 :2005/11/18(金) 07:40:35
>>244 様
ありがとうございます。
ところで、なぜその式になるのでしょうか?
参考になるHPなどありましたら教えていただけますでしょうか?
こういう情報って、どのようなキーワードでググれば出てきますか?
無知&教えて君でスマソorz
>>258 どちらかというと算数のお話し
3×2の画像は
123
456
の順でデータが並んでいる。あとは自分で考えれ
260 :
デフォルトの名無しさん :2005/11/18(金) 08:55:05
>>259 そうだね、数学じゃなく算数レベルだねぇ(w
widthは横の幅、yは縦の位置、xは横の位置、だから解りやすくすると・・・
i = (width * y) + x;
まぁ、実際に画像の加工をするなら static inline offset(int x, int y, unsigned width) {return x + y * width;} とでもしておくと便利なわけだが。 #どう便利かはスレ違いにつき割愛。
アライメントのこと忘れてるヤツが多いのかな
アライメット、あれは良い物だ
4bitでRLEなDIBを食わせてやるぜ。
ペッ
メモリデバイスコンテキストの情報をビットマップファイルとして ディスクに書き出すにはどうしたらよいのでしょうか?
前略 CreateFile WriteFile CloseHandle
>>262 そんなときにも>261のように関数にしておけばちょっと安心。
>>267 デバイス非依存ビットマップを作成し、
それに対しBitBlt()などで記録したい情報をコピー。
それからDIBの内容を
>>268 の通りにする。
そうそう、そうだったな
bitmap の画像に文字を埋めこんでいますが、文字列の取得のためにダイアログを 出してやって入ます。これをエディタのようなインライン入力にしたいのですが、 これまでこの手の操作は edit control 任せだったので、APIもよく分かりません。 ImmCreateContext() とかを使うのかなと想像していますが、マウスでクリックし た場所に入力ウインドウを表示するというのは、どういう API を使うのでしょうか。 この関連を調べろとかでも結構です。お教え下さい。 (猫でも...も見ました。IMM 設定操作のみのようです。)
その場にeditを出してしまうのが手っ取り早い。
エディットコントロールで使用するフォントをArialに変更しているのですが Arialは日本語をサポートしていないため全角文字を入力すると文字化けしてしまいます。 この文字化けを防ぎたいのですが何か方法はありますか?
答えわかってるんじゃん。
>>275 ・全角文字を入力させない。
・Arialを使わない。
フォントリンクとかできねーの?
UNICODEアプリにすればオケ。
それは嫌です
諦める
282 :
デフォルトの名無しさん :2005/11/18(金) 21:09:59
自アプリのファイルの関連付けをプログラムから変更した場合に、 アイコンなどは再起動しないとエクスプローラなどに反映されないみたいですが、 これをすぐに反映させる方法をご存知でしたら教えてください。
286 :
243 :2005/11/18(金) 21:29:04
287 :
282 :2005/11/18(金) 21:43:57
>>285 早速のお返事ありがとうございます。
意外と手軽に実現できたので驚きました。
本当に助かりました。
>>283 はたぶん私はこれからここへ行って調べてきますって言いたかったんだよ
290 :
273 :2005/11/18(金) 22:34:01
>>274 レス感謝。「確定」をどう受け取るかイメージがまだ。試して見ます。
291 :
デフォルトの名無しさん :2005/11/19(土) 00:59:12
257 :デフォルトの名無しさん :2005/11/18(金) 05:41:02 メニューバーとツールバーにヴィジュアルスタイルを適用する方法を教えてください お願いします お願いします .manifestファイルおいても適用されません このとおりです これに答えてください
自作の Editor で IME のインライン変換が突然でなくなったんだけど、 どうしてかわかる人います? 同じバイナリで、別の Windows2000 や XP では出てるんだけど・・・。 環境は、Windows XP SP1、IME 2003 そんなのを設定できるプロパティってあったかな。
293 :
デフォルトの名無しさん :2005/11/19(土) 02:00:45
MakeSureDirectoryPathExists()にてフォルダを作成しています。 c:\\ \\ \\ と指定すると空白のフォルダが作成できてしまいます。 CreateDirectory() や _mkdir() などでは、空白のフォルダを作成しようとした際にはエラーになります。本来、命名規約上は作成できないのが正解だと思います。 このように空白のフォルダを作ってしまうと削除もできなくなってしまいます。 Debug系のAPIのせいかもしれませんが、何か情報をもっていれば教えて下さい。 不具合でしょうか。
294 :
292 :2005/11/19(土) 02:24:46
>>291 uxtheme.lib をロードして、DrawThemeBackground とか
適用すればいいんじゃないの?
Unicode使うと\を含むフォルダが作れるんだっけ・・・
296 :
292 :2005/11/19(土) 03:08:19
うーん、どうやら IME のナチュラルインプット2003が有効で、 かつ、 テキストサービスと入力言語>互換性の構成 の「詳細なテキスト サービスのサポートをプログラムのすべてに 拡張する」にチェックが付いていると描画できないみたいなんだけど 情報お持ちの方がいらっしゃったら教えていただければ幸いです
>>293 > 本来、命名規約上は作成できないのが正解だと思います。
果たしてそうなんだろうか。WinXPのコマンドプロンプトで試してみたが、
>md " "
だとエラーになったが、
>md " \"
とするとディレクトリができた。
削除は
>rd " \"
でOK
って、よく試したらcdができないな。ダメポ。
VCのリソースエディタでコンボボックスを置いて ドロップダウンリストにしているのですが クリックしてもリストが表示されません (正確には表示されているようなのですが、数ピクセルしか縦の幅がなくて項目が一つも見えません) どうしたらちゃんと表示されるのでしょうか?
>>298 それFAQ。ってかスレ違い。
リソースエディタ上で、ドロップダウンさせてみれば分かるんじゃない?
>>296 どうでもいいけどx64 Editionだとそのオプションないな
ある文字列の一部を指定した文字列に置換するようなAPIってありますか? 例えば、"abcdefg" の "cd" の部分を "\%" に置換するといったような感じで。
APIには無いだろうが、標準ライブラリに有るだろ。
304 :
デフォルトの名無しさん :2005/11/19(土) 06:31:46
1. GUIアプリが、自らコンソール窓を開いたり、既存のコンソール窓に出力したりすることは可能なのでしょうか? 2. Win32コンソールアプリが、コンソール窓を自ら閉じてしまう(実行は継続)ことは可能なのでしょうか?
可能
306 :
デフォルトの名無しさん :2005/11/19(土) 07:16:26
>>306 いれたSDKのフォルダをインクルードパスに指定してないか、指定順序が後のほうになってるんじゃない?
308 :
デフォルトの名無しさん :2005/11/19(土) 07:41:57
>>307 最新版のSDKのインクルードファイルが詰まってるフォルダを一番先に指定してるけど無理
直接定数値を入力すれば?
つ Tmschema.h
>>308 インスコしてんのに使えないんだから、
設定か記述か、どちらにしろあんたのやり方が悪いだけ
Windows2000/XPだと、txtファイルなどの通常ファイルにもコメントやカテゴリを埋め込むことができる。 docファイルなどの内部ストレージファイルの場合は、 PSDKにあるStructuredStorageサンプルのpropdump.cppを単体ビルドしたもので閲覧できるのだけど、 通常ファイルの場合は、このサンプルではプロパティを取得することができない。 どなたか、txtなどの通常ファイルのプロパティ(カテゴリ・コメント・作成者など)を取得する方法をご教授下さい。
>>312 NTFS副次ストリームのSummaryInformationに保存されている。
だからhoge.txtならhoge.txt:SummaryInformationという名前でファイルを開けばデータを読み出せる。
俺もやったことはないからどういう風に格納されているかは知らないけど。
314 :
デフォルトの名無しさん :2005/11/19(土) 09:41:59
315 :
312 :2005/11/19(土) 09:57:05
(´・ω・) カワイソス
318 :
315 :2005/11/19(土) 09:59:03
文章訂正: × 自分の環境では"StructuredStorage"の前に0x05が入るため、 ○ 自分の環境では"SummaryInformation"の前に0x05が入るため、
どういう誤植だよそれ
320 :
312 :2005/11/19(土) 10:31:02
>>319 直前にクリップボードに入ってた文字列が似てたから間違えただけ。
BTW、
>>312 で失敗サンプルとしてあげたpropdump.cppで呼び出している、
StgOpenStorageEx()の第7引数のGUIDを
IID_IStorage から IID_IPropertySetStorage に変更すれば、
ちゃんとNTFSプロパティでも動くっぽい。但し、なぜかassert()を吐く。
321 :
315 :2005/11/19(土) 10:53:47
>>315 の文章訂正:
×"hoge.txt:\x50SummaryInformation"
○"hoge.txt:\x05SummaryInformation"
全然似てねぇ・・・
ていうか取得して何に使うんだろう・・・ 微妙に気になった
エロ動画にジャンルを埋め込めば自動で整理するツールを簡単に作れる
なるほど
>>323 応用は色々だね。メディアファイルにユーザ定義の付加情報つける時に有益だ。
Office・一太郎ドキュメントファイルなどの内部ストレージ型情報と違って、他のPCに持ちこしできないけど。
自作のメディアプレイヤーを使用しているのであれば、 メディアのタイムマーカー情報を副次ストレージに保存できる。 長時間のファイルの頭出し再生もこれで快適だ。
副次ストレージって便利なんだな
329 :
292 :2005/11/19(土) 15:55:15
>>301 レスありがとうございます。
うーん、他の Editor(sakura とか)では、その状態でも IME の
変換ウィンドウが出るから、やり方が悪いみたいなんだけど・・・。
ちょっとシンプルなサンプル作って考えて見ます。
330 :
デフォルトの名無しさん :2005/11/20(日) 02:16:46
あるプロセスが起動しているかどうかを調べて 起動してなければ起動する、 既に起動していたら何もしない、 といった動作を考えているのですが、起動しているかどうか を判別する方法はありますか?
331 :
330 :2005/11/20(日) 02:18:55
ちなみに、その「あるプロセス」は、一番最初は 自分で起動する事が決まっています。そのため ハンドル等は保持しておく事は可能なので そのハンドルを使って判別するAPIとかがあれば 良いのですが。
二重起動防止等でググればいろいろ出てくると思うが、CreateMutexでも使っとけば。
333 :
330 :2005/11/20(日) 02:28:47
ありがとうございました。逝ってきます。
OpenMutex⇒CreateMutexで2重起動出来たという落ちは未だ。チンチン(AA略
アトム使ってもいい?
お茶の水博士の承認が必要です。
むしろ手塚プロダクションの承認の方が厳しいぞ
ブラックジャックとサングラスと手塚センセがギャルゲーをしてるマンガで、 隅に「手塚プロダクション承認済み(本当)」と書いてあるのを見たことがある。
マジレスが1人もいないのかw GlobalAddAtom GlobalGetAtomName GlobalDeleteAtom GlobalFindAtom で、アトムテーブルを使っても逝ける。
341 :
デフォルトの名無しさん :2005/11/20(日) 17:52:43
>>341 適当に言ってみるけど
wndclass.hbrBackground = GetStockObject( WHITE_BRUSH );
これをNULLにしてみては?
>>340 そのリンク先の多重起動防止の所のコードでReleaseMutex()って必要なのかなぁ
C言語初心者スレからきました。 ウインドウを表示するプログラムをコンパイルしたのですが、 外部シンボル ’_main’が未解決 (C:\borland\bcc55\lib\cox32.objが参照) というエラーが表示されます。 どういう意味ですか?
main()関数がないんだよ。
347 :
345 :2005/11/20(日) 21:06:24
レスありがとうございます。 WinMain()が最初に書いていますが、別にmain関数がいるんですか?
知識が無いなら金払えのいい見本だな。 そこから動くまで教えてやれるほど気が長くないよな。 普通の人は。
>>345 bccのFAQ。ヘルプのコンパイラオプションのとこ嫁
おー、懐かしい。 俺が買ったのはVer.2だったな。 BorlandC++も買ったけど、高校生だったから高かったなぁ。
353 :
345 :2005/11/20(日) 21:49:59
ここも違いますか? どこへ行けばいいのでしょうか?
354 :
345 :2005/11/20(日) 21:51:34
>>350 すいません。リロードしてませんでした。
bccの問題なんですね。そこを読みます。
ありがとうございました!
TurboC良かったけどな マウスなかったから、左手だけでカーソル動かせるのが好きだった そういやVCのキーコンフィグを弄らなくなったのはいつからだろう
>>344 いらないけどこのMutexは本来の目的(待機)にはまったく使ってないから
間違いでもない
win32 api はどうしてこんなに糞仕様が多いのでちゅか?
昔はパラメータチェックすらなかったから変なパラメータ渡すと 簡単にOSがおかしくなってたな
Winampみたいに動的にタスクバー表示/非表示を切り替えるのって どうやってるんですかね? 最初からずっと非表示なら、HIDEのメインウインドウを用意すれば できましたけぢ。
いかにもアバウトな欧米人の作ったものらしい
俺らもアバウトになれば解決
>>361 WM_EX_APPWINDOW拡張スタイルをつけたりはずしたりすればいいんでない?
>>361 The Shell creates a button on the taskbar whenever an application creates a window that isn't owned.
To ensure that the window button is placed on the taskbar,
create an unowned window with the WS_EX_APPWINDOW extended style.
To prevent the window button from being placed on the taskbar,
create the unowned window with the WS_EX_TOOLWINDOW extended style.
As an alternative, you can create a hidden window and make this hidden window the owner of your visible window.
The Shell will remove a window's button from the taskbar only if the window's style supports visible taskbar buttons.
If you want to dynamically change a window's style to one that doesn't support visible taskbar buttons,
you must hide the window first (by calling ShowWindow with SW_HIDE), change the window style, and then show the window.
マウスカーソルを移動させてクリックさせたいのですが GetCursorPosで移動は出来たのですが、 クリックの方法が判りません。 教えてください。宜しくお願いします。
mouse_event
GetCursorPosで移動ってことは…
SendInput
SendMessage WM_LBUTTONDOWN
本当にありがとうございました
374 :
デフォルトの名無しさん :2005/11/21(月) 20:22:30
timeSetEventのTimerProcを同時に複数使うことは出来るでしょうか。 timeBeginPeriodとtimeEndPeriodを 前後に付けるルールがあるので、やり方が分かりません。
375 :
デフォルトの名無しさん :2005/11/22(火) 00:22:49
何故WindowsのAPIを使ってコードを書くと 小汚くなってしまうのでしょうか?www
書いてるやつにコーディングセンスがないから
書いてるやつが小汚いから
自己評価乙w
EnumThreadWindows等の、ウィンドウ列挙APIで列挙したウィンドウ(というかダイアログ)が、 本当に目的のウィンドウかを区別する方法について。 SendMessageTimeoutを使って、「山」といえば「川」を返す、みたいな特定の「合言葉」を 何個かやりとりして、相手を識別する方法はどうかと思うのですが...問題ありますか?
>>379 たまたまその投げた先のウインドウが実装している独自定義のメッセージIDとぶつかってしまった場合
381 :
379 :2005/11/22(火) 01:52:27
そこはRegisterWindowMessageあたりで。 っていうか、まさにこういうときに↑を使うんですかね。
>>379 が何をしたいのかよくわからない。
俺様ルールを決めたところで他プロセスは全く従わないと思うが。
ウィンドウ名かウィンドウのクラス名を調べればいいじゃん と言ってみるテスト
補足したい相手のアプリは自作なんだよな? で、ウィンドウ名、クラス名、メッセージ通信だと偶然被るのが心配、と。 だったら共有メモリ使ってハンドルを受け渡すってのが確実といえば確実。
ああ、RegisterWindowMessageで決着ついてたのか。 ゴメソ。見なかったことにしてくれ。
これまで長いこと使ってて気がつかなかったんだが、TRACEマクロ内の文字列で、 '\n'だけの改行の後に日本語の文字列を出力すると、アウトプットウィンドウの 表示がおかしくなるのな。 例えば ... TRACE("\n現在時刻 =%s",COleDateTime::GetCurrentTime().Format(_T("%Y/%m/%d %H:%M:%S"))); や TRACE(_T("\n現在時刻 =%s"),COleDateTime::GetCurrentTime().Format(_T("%Y/%m/%d %H:%M:%S"))); の実行結果は... 現サ在時刻 =2005/11/22 12/34/56 と「現」と「在」の間に半角の「サ」が表示される。 TRACE("\r\n現在時刻 =%s",COleDateTime::GetCurrentTime().Format(_T("%Y/%m/%d %H:%M:%S"))); や TRACE(_T("\r\n現在時刻 =%s"),COleDateTime::GetCurrentTime().Format(_T("%Y/%m/%d %H:%M:%S"))); と、「\n」→「\r\n」とすれば問題ない。 コンソールのバグが原因なのか?これって、ガイシュツ? 環境は、VC++6.0SP6で、Win2000,Win98とも同じ結果になった。
改行文字を考えろ
OutputDebugString("\n現在時刻"); OutputDebugString("\r\n現在時刻"); OutputDebugString("\r\r\n現在時刻");
HPEN hPen = CreatePen(PS_SOLID, 2, RGB(255, 255, 255); として作成したペンを hPen = CreatePen(PS_SOLID, 1, RGB(128, 128, 128); と後から変更しようと思ってるのですが2回目のCreatePen()の前にDeleteObject()は必要ですか? それと二種類のペンが必要な場合は、↑の様にせずに 最初からペンを二つ用意しておいた方が無難ですか?
>>389 それは、解放せずに同じ変数に上書きしてるだけ
リークしたくなければ、DeleteObjectするべき
最初から二種類要るとわかってるなら用意しとけ
>>390 >>391 迅速なレスありがとうございます。
最初から二種類必要なのはわかってるのですが
同時に使用することはまず無いので
一つの変数を使いまわしで良いかと思いました。
使いまわす場合はDeleteObjectが必要で
使いまわすよりは別々に用意しておいた方が良いのですね。
「同時に使用することは無い」は「交互に使用することは無い」の間違いでした
文字列が見つかりません:「同時に使用することは無い」
>>392 使い回さなくても、DeleteObjectはしろ。
念のため聞いておくけど、SelectObjectの返り値を使って復元しているよな。
evntはCreateEvent()で作成したハンドルです。 ret = WaitForSingleObject(evnt, 0); の戻り値について質問なんですが、 evntがシグナルな状態ならWAIT_OBJECT_0 evntが非シグナルな状態ならWAIT_TIMEOUT が戻ってくると考えて正しいでしょうか?
MSDNを読む限りそう書いてあるようです。
>>398 ドキュメントが本当に正しいかどうか自力で検証できるように、
関数の動作テスト用の小規模なプロジェクトを用意しておくべきだよ。
のちのちまで、その小テスト環境が威力を発揮することになる。
小テストをはじめるに当たって、何が影響を与えていて何が影響を与えていないのか、
最初に考えなければならないが、これが問題の切り分けをする良い機会になる。
さすがM$の製品、ユーザが使用前にAPIのテストをしなきゃならんとは…ククク
お前プログラマじゃないだろ
標準のC/C++であっても動作テストはやるものだ。 Unix系のUnicode関連処理のお粗末ぶりを確認するためにも必要だ。 また、ドキュメントの微妙なニュアンスが正確にプログラマに伝わらないことは多い。 例えば、構造体メンバに渡した文字列のアドレスは、すぐに破棄してよいのか、維持する必要があるのかなど。
404 :
デフォルトの名無しさん :2005/11/23(水) 02:22:25
SetWindowsHookExを使ってコンソールアプリもAPIフックしたいんだけど SetWindowsHookExは コンソールアプリからだと使えないのかな 誰か知っている人が居たら教えて
>>404 使えない。
コンソールアプリはメッセージキューが無い。
(無いっていっちゃうと厳密じゃないかもしんないけど。)
406 :
デフォルトの名無しさん :2005/11/23(水) 02:36:16
>>405 あー、そうなんだ。
ということは、例え、全プロセスにAPIフックしていたとしても
コンソールアプリからAPIを叩かれると、ダメなんだ。
というか全プロセスのAPIをフックしたかったら、 レジストリでやってもいいんじゃないか?
408 :
デフォルトの名無しさん :2005/11/23(水) 02:41:51
健全なキーストローク記録プログラムを制作しようと思うのですが、 タイマーでチェックしまくるのとフックするのって、どちらがオススメでしょうか?
>>410 レスありがとうございます。フックで行く事にします。
#レスを見た後検証し、納得しました
指定したウィンドウがMDIの子ウィンドウか調べる方法はありますか?
ありますよ
>>408 その通り。そのレジストリもUSER32.DLLが見てDLLをロードしている
(本来はプロセス間で共通のウィンドウクラスを登録するためのものだから)
よってUSER32.DLLを使わないプロセスに対しては無力。
コンソールアプリのAPIフックにはCreateRemoteThreadかDebugActiveProcessが必要。
質問です。 ある関数のメモリ使用量をモニタリングする関数or方法があれば教えてください。 最終的にやりたい事は、その関数内における最大メモリ使用量の取得です。
どんな変数があるかとかチェックして自分で計算すれば?
>>415 ・メモリとはヒープなのか、スタックなのか。
・ヒープの場合、その関数でallocして、外に所有権を移した場合、どうカウントするのか。
・その関数で作成したインスタンスがdelayed-initializeされた際のメモリはどの関数につけるのか。
・OSからのメモリ取得、言語内のメモリ管理どちらを対象にするのか。
・再帰した場合、どのようにカウントするのか。
・例外が発生した場合、どのようにカウントするのか。
・その関数が、他の関数を呼んだ場合、その呼ばれた関数の分もカウントするのか。
・その呼ばれた関数が、SendMessageだったりした場合、
他のスレッドにメッセージを送ってその処理終了を待つことがあるが、その場合他スレッドの分はどうカウントするのか。
・その関数が内部で他のスレッドを起動した場合、そのスレッドの分はどうカウントするのか。
とりあえず思いついた謎。
スタックならプロファイラで分かったような気がする。
実行状況で変わるんじゃないの?
>>415 それは最終的にやりたい事じゃないだろ。
その値を使ってする事が最終的にやりたい事だろ。
どのみち関数毎は自分で計算するしかないな。
一応、パフォーマンスカウンタを調べれば出来ることと出来ない事が判るだろう。
420 :
デフォルトの名無しさん :2005/11/23(水) 12:37:36
>>414 できますた。
色々なテクニックを組み合わせないと、実現できないのね。
感謝です。
自ウィンドウ外でもマウスの動きを取得するには、どうすればいいんでしょうか
APIからconsoleアプリを呼び出して標準出力の内容を呼び出し元で取得したいのだけれど どうすれば良いの?
>>422 つ[popen()]
APIもあるだろうけど取り敢えずこれ。
>>423 呼び出し元がconsoleアプリじゃないのでpopenじゃ無理っぽいですがpopenのヘルプ内の
リンクにCreatePipeのサンプルがありました。これだと出来そうです。
ありがとうございました。
>>421 SetCapture & ReleaseCapture ?
427 :
デフォルトの名無しさん :2005/11/23(水) 15:37:23
お久しぶりです(^o^)
さっそくですがツールバーやメニューバーに視覚スタイルを適用する方法を教えてください(^o^)
他の掲示板にいったけど完全にスルーされたので戻ってきました^^
http://up.mugitya.com/img/Lv.1_up12444.jpg メニューバー・ツールバーを作ってみたら、上の奴のようになってしまうのです。
下や真ん中の奴のように視覚スタイルを適用したいのですがどうすればよいのでしょうか?
DrawThemeBackgroundでできると思ったのですが、それらしい定数が見つかりません(分かりません)
何卒お願いいたします(^^)
>>424 別に呼び出し元がconsoleアプリじゃなくてもpopen()できると思うのだが。
テキストファイルの特定の文字列のある1行を書き換えたいんだけど 何か便利なAPIってありますか? 今の所 ファイルを1行ずつ読み込みながら 条件によってそのままか書き換えして、別ファイルに書き出すってベタな方法考えてる。
長さが変わる可能性がある以上は是非もないと思うが。
,j;;;;;j,. ---一、 ` ―--‐、_ l;;;;;; {;;;;;;ゝ T辷iフ i f'辷jァ !i;;;;; APIならやってくれる…… ヾ;;;ハ ノ .::!lリ;;r゙ そんなふうに考えていた時期が `Z;i 〈.,_..,. ノ;;;;;;;;> 俺にもありました ,;ぇハ、 、_,.ー-、_',. ,f゙: Y;;f ~''戈ヽ `二´ r'´:::. `! ありがとうございました
>>434 そんな事いわないで教えてくださいよ
教えてくれれば二度と着ませんよ
今度からは、もっと上手く釣ろうな?
>>435 「やり方」が知りたいんだよね?そこまでに簡単に出来る事じゃない気がする。
ここで聞くよりも、自分が使ってる開発環境のスレ行った方が早いよ。
>>435 「独自に GUI 部品を作成している場合」とやらに該当するのか?
俺には貼ってあるアイコンの絵が違うようにしかみえないんだけど? 視覚スタイルとはなんぞや?
malloc(436); free(439);
>>436 うわっ
気持ち悪い
この人
>>437 俺の環境=bcc32+sdk
>>438 普通にツールバーを作成しただけで、独自に作ったわけじゃないよ
>>439 Visual Styleともいう
よく見てみてください。
色が違います。しかも真ん中や下の奴はグラフィカルです。
>>441 MFCとか知りません
答え知る気ないだろ
釣る気は満々のようだねぇ
今日は大漁だなwww
しかしま、ドッキングツールバーを作りたいのかと思いきや 独自のアイコンを作りたいだけみたいだな。
あ、自己解決しました
アイコンだろ
>>450 もう解決したんでいいですよ
ちなみにアイコンじゃありません
>>442 ツールバーの変なの使ってるってぐらいしかわからないんだけど?
猫でもわかる〜のところにのってなかったっけ?
俺もOSはXP使ってるけどXPスタイルにしてないせいか、
IEのツールバーがグラフィカルかどうかはさっぱりわからん。
つーか、グラフィカルってアイコンのこといってるわけじゃないんだよな?
ツールバーが白っぽいってことをいってるんだよな?
#ただ、へなへなアイコンに移動されると使いにくいだけだぞ。
#ドッキングツールバーと同じでやる意味あるのか?
なんにしても普通はmanifestファイルを作るだけでできると思うのだけど。 432を試してどう駄目だったのか?
>>453 普通にmanifestファイル作って置いとくだけじゃ、ボタンとかにしか反映されんよ
なんだよ。 ちゃんと Luna スタイルって名前でのってんじゃん。
解決したっぽいな・・・w
俺からすればこんなん死んでも入れたくないけどな。 こんなんだし↓w タイトル表示やリンク コントロールなどの ComCtl32.dll バージョン 6 の機能を使用する場合、 これらのコントロールがユーザーのコンピュータで使用できない事態に対処する必要があります。 ComCtl32.dll バージョン 6 は、再配布することができません。
そんなわけのわからんスタイルにする必要がないな
consoleの簡易編集モードを無効にするにはどうしたら良いのでしょう? あれが生きていると画面をクリックすると止まってしまうんですね。 console周りのAPIを調べたけどそれらしいのは見つからなかった。orz
>>461 コマンドプロンプトのシステムメニューからプロパティを選んでそれらしいオプションをいじる
おいお前らスルーしろよ!相手の思う壷だぞ・・。
やっぱり頭おかしいな ま、たくさん釣れたから満足しただろうが。
>>463 どうみてもLunaスタイルじゃねーの?
ちなみにクラシックウィンドウにかえてみるとツールバーの色に違いなんてないけど? だからやっぱXPのLunaスタイルのなんかに反応して処理が変わってんじゃねーの?
>>462 それをプログラムからやりたいんですが・・・
470 :
デフォルトの名無しさん :2005/11/24(木) 00:08:50
コモンダイアログ表示中、イベント処理をブロックしないようにしたいと 考えています。 ・モードレスで起動 ・別スレッドでダイアログを表示させる といった方法があるのかな、と思いましたが コモンダイアログをモードレスで表示させることは可能なのでしょうか。 (なるべくならスレッドは作成したくないので…)
>>428 そ、そうなんですか。。
VC2003のランタイム ライブラリ リファレンスにはWindowsアプリから使うとハングするとか書かれていたので。
>>470 不可視ウィンドウをメインウィンドウとして作成し、かつてのメインウィンドウの親にする。
その後、コモンダイアログの親を不可視ウィンドウにする。
かつてのメインウィンドウの作成方法を変更する必要があるけど、
不可視ウィンドウをメインウィンドウにする手法は一般的だよ。
タスクバーに表示される文字列と可視ウィンドウの文字列を違うものにしたい場合などにも、役に立つ。
>>427 以前てめぇにゃ絶対もう教えないと言った者だ。
また暴れてるようだな。
めんどくせぇけどアク禁依頼出しとくから。有難く思え。
これはひどい
なんか最近どのスレ行っても俺以外にもう一人変なの湧いてるんだけどなんだろう? これが類は友を呼ぶって奴なの?
朱に交われば赤くなるかもなwww オリジナリティ0www
480 :
デフォルトの名無しさん :2005/11/24(木) 10:46:17
ちょいとお尋ねしますが、MSDNのMesageBOX()関数のヘルプは皆さんも英語ですか??
MesageBOX()関数なんてものは無い
482 :
デフォルトの名無しさん :2005/11/24(木) 10:51:30
MessageBox(hWnd, szBuf, "Debug", MB_OK); これです。スペルミスでした
日英両方あるますが。
両方あるますね
485 :
デフォルトの名無しさん :2005/11/24(木) 10:58:08
見つかったんですが、.net framework SDK の方にありました。 win32APIのドキュメントはMSDNではなく、こっちなんですかね?
win32APIのドキュソメソトは
検索後ちゃんと、MSDNから見れるようになりました。
なんか色々と誤解がありそうな気がする
横やり入れると、Visual Style != Lunaスタイルだよ。 Lunaは、Visual Styleで使える1デザイン。 タイトルバーが青くて、タブにオレンジの帯がついて…というのをLunaと言う。 (シルバーバージョンとかもあるが) 当然Visual Styleでは他のデザインも使用できる。
それを言うなら、VS ≒ Luna
491 :
デフォルトの名無しさん :2005/11/24(木) 12:37:11
DirectShowを使ってプログラムするためDirextX 9 SDK をインストールしたのですが、 C:\Program Files\Microsoft DirectX 9.0 SDK (October 2005)\Includeの中に dshow.hがありませんでした。Graph Editなども付属していませんでした。他にインストールしなければいけないのでしょうか? ご存知の方がいらっしゃいましたらご教授下さい。
Lina⊆VS
494 :
デフォルトの名無しさん :2005/11/24(木) 12:51:13
う〜ん。Extrasってフォルダの名前ですよね?探したのですがExtrasが 見つかりませんでした。
Negative
496 :
495 :2005/11/24(木) 13:03:01
うんこ
497 :
495 :2005/11/24(木) 13:06:36
Direct Showはいつからか忘れたけど、Platform SDKに統合されたんじゃなかったっけっか?
498 :
491 :2005/11/24(木) 13:23:35
>>497 Platform SDKにありました。有難うございます。
bcc -I
で無事動きました。有難うございます。。
499 :
495 :2005/11/24(木) 14:00:30
_, ._ ( ゚ Д゚) ( つ O ガシャ と___)_) __ (__()、;.o:。 ゚*・:.。
この板にもIDが欲しいな・・・
空欄IDならいいけど。
あるアプリがCreateProcessでプロセスを起動したとします。 そのプロセスを同アプリから必要なくなった時に強制終了させる事はできますか? LinuxだとプロセスIDを検索してkillするような処理が可能ですが それと同じような事をしたいのですが。
>>502 強制終了させたいというなら、TerminateProcess()
その起動するプロセスも自分のものなら、
何らかのプロセス間通信で終了させたほうがいいけどね、
>>502 自分で起動したプロセスなら検索しなくてもハンドルわかるだろ
イヤです
会話になってません
>>502 もしWM_CLOSEで終了してくれるプログラムなら
WM_CLOSEの方がいいかもしれん。
強制終了じゃなくて、自主的に終了してくれるようにお願いする、
みたいな感じだけど。
便乗質問だけどwindowsのタスクマネージャの「プロセスを終了」ボタン 押して強制終了させんのはやっぱTerminateProcessしてんのかな
>>509 MSしか知らない「裏技」だったしてなwww
デバッガで覗いたらTerminateProcessだった。
513 :
デフォルトの名無しさん :2005/11/25(金) 05:19:33
ダメです
>>513 さっさと首吊って死ねやうんこちゃん(^o^)
イヤです。
520 :
デフォルトの名無しさん :2005/11/25(金) 12:24:53
#include <dshow.h> としてlstrcpyを加えたコードを bcc32でコンパイルするとエラーが出ます。他にも色々使えない関数が出てきました。 --------------------------------------------- #include <windows.h> #include <dshow.h> int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow){ TCHAR ore[64]; lstrcpy(ore,TEXT("こんにちは")); return 0; } --------------------------------------------- bcc32 -I"C:\Borland\Bcc55\Include" -L"C:\Borland\Bcc55\Lib" -I"C:\Program Files\Microsoft DirectX 9.0 SDK (October 2005)\Include" -L"C:\Program Files\Microsoft DirectX 9.0 SDK (October 2005)\Lib" -I"C:\Program Files\Microsoft Platform SDK\Include" -L"C:\Program Files\Microsoft Platform SDK\Lib" -W test.cpp --------------------------------------------- エラー E2451 test.cpp 7: 未定義のシンボル lstrcpy_instead_use_StringCbCopy_or_St ringCchCopy(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) ) もし解決方をご存知の方がいらっしゃいましたらご教授なにとぞお願い致します。
>>520 書いてある通りにすればいいんじゃない?
つまり、lstrcpy()を使うのをやめてかわりにStringCbCopy()か
StringCchCopy()を使う。
>>520 >-L"C:\Program Files\Microsoft Platform SDK\Lib"
_, ._
( ゚ Д゚) ガシャ
( つ O. __
と_)_) (__()、;.o:。
゚*・:.。
523 :
520 :2005/11/25(金) 12:41:49
524 :
495 :2005/11/25(金) 13:28:38
525 :
デフォルトの名無しさん :2005/11/25(金) 16:28:10
isdigitの代わりになるAPIを教えておくれ
ねぇよ それくらい自分で判定しな
あるウィンドウにメッセージをおくりたい。 ただし、そのウィンドウが既になくなっている場合は送れなくても問題はない。 という状況で、以下のようにしました。 if(IsWindow(hWnd)) PostMessage(hWnd, WM_MESSAGE, 0, 0); この場合IsWindowで分岐させなくても問題なく動くのですが パフォーマンス・安定性・SDKの仕様などの観点からはどちらのほうがよいのでしょうか? また、同様にSendMessageの場合はどうでしょうか?
>>528 まだ勉強中の俺だから間違ってるかも知れないが
MSDN見た限りだと、PostMessage/SendMessage共に消えたウインドウのハンドルを
渡したときにどうなるかって事については明記されてなかった
使わない砲がいいんじゃまいか?
同じウィンドウハンドルが全然違うウィンドウに使いまわされると言うことはアウトオブ眼中ですか?
IsWindowがtrueを返した瞬間、ウィンドウがなくなる可能性も?
532 :
528 :2005/11/25(金) 19:14:35
>>529 ,
>>530 レスありがとうございます。
>同じウィンドウハンドルが全然違うウィンドウに使いまわされると
その可能性もありますね;
プロセスIDなどを取っておいて毎回照合すべきでしょうか。
>>531 頭が痛くなってきましたorz
>>532 SendMessage()/PostMessage()に限らず、API呼び出しはAtomicな処理では
ないので、
>>529-531 が言ってるようなことは気にする必要はない。
SendMessage()を呼び出した時にはウィンドウが存在しても、システムがAPI
処理中に、ウィンドウが消えてしまう場合もあれば、PostMessage()が正常
終了しても、ポストしたメッセージより先に相手のメッセージキューに
WM_CLOSEが溜まっている場合もありうる。
確実にメッセージを届けたかったら、ミューテックスとか、共有メモリなど
を使ってプロセス/スレッド間で同期をとる必要がある。
>>533 目的のウィンドウが、自分が作ったものじゃない時はヌルーですか?
535 :
デフォルトの名無しさん :2005/11/25(金) 20:21:12
別のソフトのある入力フォームに数字を入力してEnterキーを押す、 といったような操作を行うにはどうすればいいのでしょう? Googleで検索するにも取っ掛かりが掴めなくて困っています。 メッセージのフックとは異なるでしょうし。
>>535 上で出てるSendMessageとかPostMessageでいけるんじゃない?
537 :
528 :2005/11/25(金) 20:41:51
>>533 解説ありがとうございました。
ウィンドウがなければメッセージは届かなくても良いので、いきなりSendMessageを呼んでいいのですね。
ただ
>>530 は低い確率かもしれませんが、起こりえるのではないかと思うのですがどうなのでしょう?
ウィンドウの特定方法による ウィンドウタイトルとかわかってるならFindWindowしる
>>509 WM_CLOSEを送ってシカトされたらTerminateProcess()してるんだとおも。
私の話を聞いてっ!無視するなんてヒドイ><
>>534 自分(のプロセス内)で作っても、別スレッドで作成されたウィンドウの場合、
メッセージループが独立しているので、プライマリスレッドがウィンドウの
消滅を知らずに、SendMessage()/PostMessage()する場合もある。
__cdeclとか__stdcallとか関数呼び出し規約が複数あるのには 何か特別な理由があるんでしょうか? こんなもん1つあれば十分な気がするのですが・・・ WINAPIとかCALLBACKとかいちいち書かなくていいし。 教えてエロイ人。
>>543 他言語と呼び出し規約を合わせる気は無しですか
546 :
543 :2005/11/26(土) 00:43:41
>>545 あー、そういう理由があったんですか。
勉強になりました。ありがとうございます。
549 :
デフォルトの名無しさん :2005/11/26(土) 12:28:14
そういう理由じゃないんですか?
cdeclは呼び出した側が引数の後片付けをし,可変個引数が使える。 stdcallは呼び出された側が引数の後片付けをする。 (ちなみにVCではfastcallとthiscallもある) x86ではユーザーモードからカーネルモードへ行く処理の途中で引数はカーネルのメモリへコピーされ, 元のは片付けられてしまうのでstdcall(/pascal)形式にするしかない,という話を聞いたことがある。 なので他の関数も全てstdcall(/pascal)に統一したのではないだろうかと俺は思っている。
システム情報を更新するみたいなAPIってありましたっけ? なんかあったような気がするんだけど見つからない。 XPにSP2入れたら起動直後にSUBSTしたドライブが、 マイコンピュータ上でF5押さないと認識しなくなってしまったのでした。
ヒント:SPI
553 :
470 :2005/11/26(土) 21:31:04
>>473 ありがとうございます。message-only windowというやつですね。
もうちょっと調べてみます。
(web上にはMFCのサンプルコードは沢山あるようですが…)
>>553 是非、調べるといいと思う。
Windowsでソケットを扱う場合にも重宝するよ。
メッセージループを使わずにselect()で実装して痛い目に遭う人は多い。
特にUnix出身者。ほぼ間違いなく嵌る罠。
>>554 もちっと詳しく。
ポインタだけでもお願いします。
>>555 WSAAsyncSelect()
目に見えるウィンドウだけがウィンドウじゃない。
むしろウィンドウの本質はメッセージ処理の受け皿であること。
コンソールアプリでもメッセージ処理用のウィンドウは作成できる。
というか、必要になる場面が結構多い。
>>556 便乗質問ですが、コンソールアプリでそうしたウィンドウが必要になる場面って
どういうものがあるんでしょうか?
サービス系のプログラムとかかな コンソールアプリとは言わんかも試練が
サービスの設定項目に、「デスクトップとの対話をサービスに許可」というチェック項目がある。 デフォルトではチェックされていない。 この項目が必要なのは、サービスプロセスがメッセージ処理を行っているからだ。 通常、メッセージは、シグナルなどのHANDLEオブジェクトと違いアクセス権限を設定できない。 そのため、ユーザのメッセージ送信から完全に遮断された領域でサービスプロセスが動いている。
561 :
560 :2005/11/26(土) 23:05:57
訂正 ×:この項目が必要なのは、サービスプロセスがメッセージ処理を行っているからだ。 ○:この項目が必要なのは、サービスプロセスのメッセージ処理を想定しているからだ。
一瞬誤爆かモノローグかと思った。
コンソール含めてウィンドウが全く必要ないアプリだったら、 そのアプリからスレッド一個作って、そこでソケット開いて送受信させれば いいだけじゃないの?
いや、どっからどうみてもモノローグだろ。
>>554 select()で合う痛い目は具体的には?
俺も
>>554 の痛い目に興味ある。
返値ハンドリングがヘタレだとまずいってのは常識として
それ以外に何かあるのか?
名前なしパイプとの互換性が一切ない。 作成できるソケット数に制限がある。
先に判っている事は痛い目ではなかろ
アフォですか?
571 :
デフォルトの名無しさん :2005/11/27(日) 00:49:35
照れるな だがあちこちに同じ一言レスしてるお前ほどじゃないけどな
572 :
551 :2005/11/27(日) 05:08:32
>>552 ↓これでできました。
PostMessage(HWND_BROADCAST,WM_COMMAND,0x0001A220,0x00000000);
SPIってのはSystemParametersInfo関数ですよね?
でもこれだと最初にパラメータに何が適当か不明でした。
C++室から案内されてきました。 CreateProcess()でプログラムが終了するまで次の処理を待つように しているのですが、 リダイレクトしようとしても、実行されません。 if( !CreateProcess( NULL, "C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe > results.xml", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ) ) どうすれば、リダイレクトされるのでしょうか?
リダイレクトはできねぇだろ? そこに記述するのは、第一引数がNULLの時の実行するモジュールと、そのプログラムに与えるコマンドライン引数だし リダイレクトはシステムの機能だし
>>573 cmd.exe /C
とか
command.exe /C
使ったら?
つーか最後のπってなんだ…
>>573 STARTUPINFOのメンバにそれらしきものがある。
バッチファイルを作成して起動!!! cmd /c のほうがマシか
578 :
573 :2005/11/27(日) 09:59:41
cmd /C を見てみたのですが if( !CreateProcess( NULL, "cmd.exe /C 'C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe > results.xml'", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ) ) でも、変化がありませんでした。
リダイレクトは標準出力から自前でやれと
system関数でも行ける気がする。コマンドプロンプト出るけど。
>>572 SHChangeNotifyで同じことができるかもしれない。
>>578 手元にWindows環境がなくて試せないのだけど、
cmd.exeってシングルクォーテーションでパス囲めるのだっけ?
あと、CreateProcessは成功してるのかどうか。
失敗してたらGetLastErrorは何返してるか。
成功してるのに動作しないなら、同じコマンドラインでシェルから実行出来るか。
などなど、ある程度自力で切り分けも。
>>566-567 alarm()がないのに仕様がalarm()の存在を前提としている。
gethostbyname()の非同期版がBSDソケットにはないとか。
つーかマジでIPv6の名前解決をタイムアウトするにはどうしたらいいのか
教えてくれ。スレッド使うしかないのか?
>>568 デフォルトのソケット数の上限が64個なだけで変更は出来るが。。
>>578 "cmd.exe /C \"C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe\" > results.xml"
じゃねーの?試してないが。
"cmd.exe /C \"C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe > results.xml\"" だろう
>>586 それだとC:\Programという実行ファイルを実行しようとしてエラーだろ。
でも
>>585 じゃリダイレクトを処理できない。リダイレクトを解釈してるのも
cmd.exeだから。
もしかして二重に囲む必要があるのか?
"cmd.exe /C \"\\\"C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe\\\" > results.xml\""
いやおまえ、その\の付け方おかしいだろ "cmd.exe /C \"\"C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe\" > results.xml\"" やるならこうだべ
>>589 それじゃcmd.exeに渡されるコマンドラインは
""C:\Program Files\Microsoft Baseline Security Analyzer 2\mbsacli.exe" > results.xml"
つまり第一パラメータ=「」(空文字列)、第二パラメータ=「C:\Program」、…最終パラメータ=「 > results.xml」
になっちゃわないか?
内側の""は\でエスケープしなきゃならないはず。つまり
"\"C:\Program Files\Microsoft Baseline Security Analyzer 2\mbsacli.exe\" > results.xml"
これをC言語の文字列リテラルの形式にしたら
>>588 になる
まさに明後日の方向だな
それともcmd.exeは/C以降はすべて一続きのコマンドラインとして解釈したりして
>>585 でいいってオチだったりするのかな?
まぁ、やってみりゃわかるだろ
reopen
595 :
デフォルトの名無しさん :2005/11/27(日) 22:47:51
INT26H で直接セクタ書込をしようと思うんだけど、手順はどうすればいいの? LOCK レベルとか解説して遅れ。
597 :
デフォルトの名無しさん :2005/11/27(日) 23:19:30
そう。DOS Mode
598 :
デフォルトの名無しさん :2005/11/27(日) 23:43:28
>>596 一応、VWIN32.VDX をオープンして、その後の話。
600 :
573 :2005/11/28(月) 00:13:28
レス遅れてすみません。
>>585 で動きました。
>>586 ,588では動きませんでした。
>>589 で動きました。
C:\の前に\が必要なことを知りませんでした。
皆様、どうもありがとうございました。
> C:\の前に\が必要なことを知りませんでした。 最終的にこうなったのが何ともいえず面白いな
\" の意味を分かってないんだな。
CreateFont等によって取得された論理フォント等のハンドルは プロシージャが終了する前にDeleteObjectしなきゃだめですか? static変数に保存して次回使ったりしても問題ありませんか?
毎回返した方が良いです ハンドルは勝手に捨てられたり入れ替えられたりするので 同一性が保障されるのはプロシジャ内だけだと思った方が良いでしょう
606 :
604 :2005/11/28(月) 04:26:11
>>605 わかりました!
ありがとうございます!
XmlTextReaderみたいなのは、ASPでありますか?
C++でxmlを操作することは可能でしょうか?
>609 誤爆?
MSXML
CreatePipe()の第四引数について質問です。 nSize パイプのバッファのサイズをバイト単位で指定します。 このサイズは、参考として使われるだけです。 システムはこの値を使って、適切なバッファリングメカニズムを決定します。 このパラメータで 0 を指定すると、既定のバッファサイズが割り当てられます。 なんてマニュアルには書いてあるんだけども、0を指定したときの 規定のバッファサイズってどこ見たら分かる? #自分で設定しても参考値にしかならんみたいだけど……どんな仕様だよ。
>>604 問題ない。ファイルハンドルも、GDIオブジェクトのハンドルも基本的には同じ。
MFCのCFontクラスやCBrushクラスは、オブジェクト内の変数としてGDIオブジェ
クトのハンドルを保持している。
自身のプログラムのバグを含めて意図的にDeleteObject()しない限り、少なく
ともシステム側で勝手に捨てられたり入れ替えられたりすることはない。
>>613 中の人もそれはそれで大変なんだよ。
察してやれ。
タブを複数行にしたときに、 選択するタブを変えても 表示される行が変わらないようにするには どうすればいいでしょうか?
選んだタブを前に出す仕様だから
618 :
616 :2005/11/28(月) 21:14:05
自作するしかないということですか?
タブをボタンにすれば
それはイヤです
ダメでした。
奇遇ですね 私もダメでした
TerminateProcess()の第二引数って、検索すると0を与えてたり0xFFFFFF与えてたりするんですが 使い方が良く判りません。何を指定すべきでしょうか?
>0xFFFFFF なんでまたそんな中途半端な……
627 :
デフォルトの名無しさん :2005/11/29(火) 13:34:47
>>612 WIN32の方です。
単純なセクタライトの場合、
(1) ロックレベル=1,アクセス権=0x0002 で論理ドライブをロック
(2) DeviceIOControl の INT26H
(3) アンロック
(4) ドライブのリセット
の手順でよか?
あと、アクセス権のbit1とかbit3、ロックレベルがなんで0とか3とかあんのか、それも和下欄。
628 :
デフォルトの名無しさん :2005/11/29(火) 14:35:28
あるコンソールプログラムを外部から利用したいと考えています。 具体的にはCraftyというチェスのプログラムで、普通に起動すると [7六歩] move 3四歩 [2六歩] move 8四歩 ... という形で対戦することが可能なチェスソフトです(実際はチェスの棋譜を返してきます)。 入力は標準入力、出力は標準出力です。 [括弧]の中にあるのはこちらかの入力で、move xxxがコンピュータからの返答です。 これを外部の、例えばグラフィカルなGUIを提供するプログラムから呼び出して 操作してやりたいのですが、具体的にどのAPIを使って通信すればよいのかわかりません。 どなたかAPIの名前だけでも結構ですので助言いただけませんか?よろしくお願いします。
632 :
609 :2005/11/29(火) 17:54:53
すいません、誤爆じゃないです。 C++ .net を使っているのですが、XmlTextReaderというAPIを 使うにはどうすればいいのでしょうか?
スレ違い
XmlTextReaderなんていうAPIはありません はい終了
635 :
609 :2005/11/29(火) 18:34:33
どう見ても .NET Framewarkのクラスです 本当にありがとうございました
>>628 APIはCreateProcess()
Yahooで
STARTF_USESTDHANDLES
で検索すれば、サンプルいっぱい。
>>631 ファイルのプロパティでWin2000互換モードにする
それはいやです
それもいやです
641 :
639 :2005/11/29(火) 21:21:05
Σ (゚Д ゚ ;)/
>>640 に断られた…orz
SPY使ってください
>>636 ありがとうございます。早速調べてみます
645 :
デフォルトの名無しさん :2005/11/29(火) 23:26:33
647 :
デフォルトの名無しさん :2005/11/30(水) 11:58:41
CreateProcessでアプリケーションを起動しているのですが、このときに SHIFTキーを押してアプリケーションを起動したように振舞いたいのですが どのようにすればいいのでしょうか? 例えば、AccessをSHIFTキー押しながら立ち上げたときのようにしたいのです。
ACCESS起動時にパラメータ渡せば?
>>648 Accessに限った話しでなくてSHIFTキー押しながら起動すると振る舞いの変わる
アプリケーション全般に使いたいと思っています。
>>647 立ち上がる時にSHIFTキーを押して貰えばいい
652 :
647 :2005/11/30(水) 13:12:50
>>651 現在はそういう運用になっていますが使いにくいという意見が出ていまして
改良できるならしてみたいと思っています。
>>653 SHIFTキーを押しているときと同じ効用を持たせるコマンドラインオプションを設けて
ショートカットでも作ればええやん。
事故参照乙
655 :
647 :2005/11/30(水) 13:29:14
>>653 起動先のアプリケーションはこちらで作成したものではなく一般にあるアプリケーションに
なりますので、パラメータを用意してもらうことはできないんです。
656 :
653 :2005/11/30(水) 13:37:22
やってまったがや。 一般にあるアプリケーションの使い勝手を変更するのはそのアプリケーションの 著作権者に対するデザインの侵害につながるので勝手にやってはいけません。 #ってことはないだろうか。 冗談さておき、もう少し情報欲しいな。 #もしかして、「例えば」じゃなくて実際にAccessの話だったりしてw
サスペンド状態で起動してグローバルフックかな
658 :
647 :2005/11/30(水) 14:09:38
>>656 本当にAccessに限らないんです。
>>657 グローバルフックですか。。。
dll作ってとか結構大そうな感じになりますよね。
やはり簡単にはできそうにないんですね。
まさかとは思うが、Shiftキーをロックできるのは知っているよな?
Alt+半角/全角 押してローマ字入力モードにして キー押すと ウィンドウ左上に文字が出てくるんだが、これを非表示にする方法無い?
662 :
647 :2005/11/30(水) 14:30:19
>>659 keybd_eventを使うんですね。
試したところ上手くいきました。
ありがとうございます!
自作のクラス内でスレッドを作成する際、現在スレッドプロシージャ はクラス外に定義して、パラメータとしてクラスのポインタを渡して 制御する方法をとっているのですが、この場合スレッドプロシージャ 内で使用するメンバ変数は全てpublic定義にしなければいけません。 上記手法ではクラス化の意味が薄れてしまうため、スレッドプロシ ージャをクラス内にstatic定義してCreateThreadしてみたところ、正 常に動作していますが、処理に自信が持てません。 Win32というよりはC++についての質問になってしまうのですが、この ようなケースでは、どちらが正攻法でしょうか?
>Win32というよりはC++についての質問になってしまうのですが 分かってて何故こっちに来る・・・
>>661 いや、APIで解決したい。
ImmSetCompositionWindow使うと、場所移動できるのはわかった
>647 それは、Access側で、起動時のShift状態を見て、 動作を変えてるんじゃなかろうか。 試してないけど、 SendInputでVK_SHIFTのDOWN →ターゲット起動、Idleまで待つ。 →SendInputでVK_SHIFTのUP でどう?
グローバルフックとかしなくても、ホットキーでよくないか?
668 :
667 :2005/11/30(水) 16:19:30
ちなみにDLL作成しなくてもグローバルフックは可能。
671 :
667 :2005/11/30(水) 16:58:05
>>665 ImmSetConversionStatus
MUTEXの一覧を烈拳するAPIを教えてください?
DDKを使えば出来そうです。 DDKのAPIでカーネルオブジェクトテーブルの取得が 出来るっぽいです。
列挙 烈拳
北斗百裂拳って、原作では最初の方にちょろっと出ただけで、全然奥義っぽくないよね
そもそも奥義なのか?>百裂拳
678 :
663 :2005/12/01(木) 08:57:05
>>678 友達は?
↑
額面どおりの意味不明な一行レスとして受け取るなよ。
ヒントが書かれている。
680 :
663 :2005/12/01(木) 10:19:54
>>679 ソレダ…って勉強が足りてないです。
スレ汚し失礼しました。
679みたいのはさすがに寒いな…
>>673 総当りで作ってみる
エラーが起きた名前は存在する
以上
Visual Studio.net 2003からデバッグモードで起動すると問題なく起動できて デバッグ無しだと起動に失敗してエラー報告ダイアログが出てきます。 んで、ダイアログ内のデバッグボタンを押すと hoge.exe の 0x7c9514b6 でハンドルされていない例外が発生しました : 0xC0000005: 場所 0x00d5503d に書き込み中にアクセス違反が発生しました。 。 と表示されてxstringの605行に緑の|>が表示されるのですが何事かわかる人いたりしますか? デバッグ無しでもWin95/98/ME/NT互換モードだと起動できます。
684 :
683 :2005/12/01(木) 19:33:45
ああ、すみません。開発環境はWindowsXP SP2+Visual Studio.net 2003で言語はC++です。
どっか初期化し忘れがあるんじゃねーの
とりあえず確実なのはスレ違いってことだ。
スレ違いでしたか。すみません。しかも自己解決してしまいました。 以前動いていた状態に少しずつ近づけてみた結果 MultiByteToWideCharを使用していた部分をCA2Wに直すと動くようになることがわかりました。 お騒がせしました。原因は今のところよくわかりませんが。 CHAR* mtext = "test"; WCHAR* wtext = NULL; int nSize = MultiByteToWideChar(CP_ACP, 0, mtext, -1, wtext, 0); wtext = (WCHAR *)malloc(nSize); MultiByteToWideChar(CP_ACP, 0, mtext, -1, wtext, nSize);
>wtext = (WCHAR *)malloc(nSize); wtext = (WCHAR *)malloc(nSize*sizeof(WCHAR));
>>688 !!!!
動きました!ありがとうございます!
MultiByteToWideChar()の戻り値って必要なバイト数じゃなくて文字数なんですね…。
勘違いしていました。本当にありがとうございました。
でもATL::CA2Wを使い続けたほうが便利だよ。
メモリ管理がちょっと楽になるぐらいじゃねーの?
>>687 方式よりはるかにシンプルに(というか1行で)書けて
しかも例外安全だが?
どーしてもATL使いたくないんなら、必要なクラス/テンプレートだけでも
パクれば?と言いたい。せっかくC++使ってるんだから。
それはいやです
ダメです
ATL使うデメリットって何かあるの?
おっと、スレ違いか、スマン
つか、C++で必要も無いところでchar*だのwchar_t*だの扱ってるのは 糞コードだろ。 って、スレ違いだけどな。
701 :
デフォルトの名無しさん :2005/12/02(金) 01:00:02
>>701 std::basic_string<T>でもCString<T>でも好きなモン使えよ
生char*とか使うよりはマシだから
>>702 なにそれ?どうなんの?
ユニコード使う奴とにてんね。
sprintfの使えない文字列クラスはウンコーヽ(・∀・)ノ
CStringの切り貼りが遅すぎて、わざわざTCHAR *で書き直した俺が来ましたよ。
> CStringの切り貼りが遅すぎて、わざわざTCHAR *で書き直した そういうシビアな速度要求はまだ存在するんだねぇ。 因みに自分は(必要時以外の)TCHAR*は怖くて使えない。絶対解放し忘れる。
>>704 スレ的には _sntprintf()。wsprintf()がギリギリ。
sprintf() を素で使う人にはグーでパンチするべきだろう。
708 :
704 :2005/12/02(金) 12:46:17
>>707 AnsiString::sprintf()使いだから大丈夫
>>704 std::basic_stringに対しての発言ならboost::formatがあると返す。
boost::formatは最強だな
ここはapiスレ
712 :
デフォルトの名無しさん :2005/12/02(金) 15:47:45
スレッドの内部で そのスレッドを Create したときの ハンドルを知る方法はありますか?
713 :
デフォルトの名無しさん :2005/12/02(金) 15:50:46
マイクロ秒単位でポートの監視をするプログラムを 作成したいのですが、 Windowsで QueryPerformanceCounter() QueryPerformanceFrequency() を使った場合、環境によって取得間隔がことなってしまうのでしょうか? また マイクロ秒単位で動かすプログラムは、 ウインドウズアプリケーションで作成は、可能なのでしょうか?
GetCurrentThread
>>704 CStringT<>にはそのものズバリのFormat()があるでよ。
std::basic_string<>の場合はstd::stringstreamを使うか
>>709 の言うように、boost::format使え。
sprintf()はバッファオーバーフローの危険性がある最悪関数。
非標準だがsnprintf()の類が使えるならそちらを使うべき。
でも、C++のフォーマッタの方が、文字列長に限界が無いし、
下らないメモリ管理に関する心配が不要だからずっといい。
C++使っておきながらchar*とsprintf()族を無意味に使ってる奴は
ただの馬鹿。
sprintfでバッファオーバーフローと言い出すのは sprintfの使い方さえろくに知らないバカ
ここは何のスレですか?
>>716 そうだな。長さは数えようと思えば数えられる。だが、それは面倒で誤りの多いコードになりがちだから
非常に多くのCプログラムでそうしたことが省かれるし、それがCプログラムのセキュリティホールを
産んで来た。
わざわざsnprintf()なんてものが導入されたのはそのためであって、そうした歴史を無視して
語ったところで無知が露呈するだけだぞ。
それにくらべてCStringT<>::Format()のようなものがいかに便利であることか。
>>716 きちんと使えるようになってもうっかり間違えることはあるさ。
何いってんだ char buff[200]; sprintf(buff, "%.180s", s); とかの「すごく簡単で基本的な使い方」すら知らないのか?
>>720 きちんと使えるようになってもうっかり間違えることはあるさ。
>>720 あんたは意図的に物事を単純化している。
%.180のように「勝手に切り詰めてもいい」場合だけじゃないだろ。
切り詰めては駄目な場合は、フォーマット後の長さを数えるしかない。
723 :
712 :2005/12/02(金) 17:36:31
>>714 GetCurrentThread で得られるのは
擬似ハンドルですよね?
本当のハンドルを得ることはできないのでしょうか?
は? 「バッファオーバーフローの危険」の話をしてるんじゃないの?
フォーマットに必要なバッファを自動的にアロケートしてくれる asprintf()のようなものが使えるシステムもある。 これは後でfree()しなければならないことを除けば、大変便利だ。 が、無論C++ならば不要なものでもある。
>>724 そのとおりだが、セキュリティホール塞ぎは仕様を捻じ曲げて達成するものではない。
それと、sprintfは、「書き込んだ文字数を返す」んだよ。 戻り値が「バッファが足りないっぽい」数字だったら 改めてバッファを広げて呼び直せばいいだけの話。 (snprintfなら、必要なバッファサイズもわかるけどね)
やっぱ勉強不足を屁理屈でごまかしてる奴ばっかじゃん。
>>727 えーと、sprintf()の場合、平気でバッファを超えて書き込んで(メモリを破壊し)、その値を返すわけですが。
>>728 「誰が」勉強不足なの?
C++使ってるくせにstd::stringstreamやboost::formatやCString<>::Format()のような便利なものを
使わない人たちだよね?w
>>726 必要があるところでなら、そのような処理をすればすれば良いだけ。
大抵のところでは、その程度で充分だよ。
例えばファイル名の長さとかに制限を設けて仕様としても問題はない。
内部処理ならなおさら。
そして、sprintfには「バッファオーバーフローの危険」はない。
>>732 >sprintfには「バッファオーバーフローの危険」はない。
「正しく使えば」が抜けている。だが、それは意外に難しい。
実のところ別に無能なわけでもなんでもないCプログラマたちが作ったレガシープログラム群
の多くにそのようなセキュリティホールが発見されているのだ。
>>729 sprintf(buff, "%.180s", s) が179を返した場合の話なんですが
その程度も推察できないのですか?
ところでwsprintfには1024文字までしか書き込まれないという制限がある。 だからどうしてもwsprintfを使わなければならないときに俺はバッファの要素数を必ず1024以上にしている。
>>734 それなら
>>727 の説明が誤っている。
>改めてバッファを広げて呼び直せばいいだけの話。
ではなくて、フォーマット文字列もいちいち変更するんだろ?
まあ、%.*sとかにしといて、長さ部分を変えるだけだろうが。
あのね、俺だって 「CString::Format等を使わないでsprintfを使え」なんて言ってる訳じゃないの。 「『「sprintfにバッファオーバーフロー』と言う奴は使い方を知らないだけ」と言ってるの。 どこぞのスレで「strcpyの脆弱性」と言ってる奴と全く同じだよ。
スレ違いを修正出来ないやつらが偉そうに語ってるが 説得力ゼロ
>>730 それだと、同じスレッドを指す別のハンドルになった希ガス。
話の流れには沿っていないがな。
>>740 Advanced Windows嫁。
ちゃんと実ハンドルが取れる。
Advanced Windowsにも、スレッドの実ハンドルをとる目的で載っている。
DuplicateHandleでも「Createしたときの」ハンドルは取れないんじゃないの? 何のためにCreateしたときのハンドルが必要なのかはともかく。 つーか質問者が何かを激しく勘違いしてる可能性が高いが。
sprintf()を擁護する池沼が湧いたか。ご苦労なこった。
おまいら、ここはWin32APIの質問スレですよ
スレタイすら読めない池沼が(ry
池沼は何をやっても許されます 裁判でも裁けません 池・沼・最・強・伝・説
748 :
デフォルトの名無しさん :2005/12/03(土) 01:18:13
sprintfが駄目ってヤツに聞きたいんだけど。
>>720 のプログラムは間違ってるの?
動かないの?
そこらへん考えてレスつけないと馬鹿に見えるよ。
見当違いのレスも馬鹿みたいだぞ。注意しな。
750 :
デフォルトの名無しさん :2005/12/03(土) 01:28:34
>>749 頭の悪い糞餓鬼が大して重要でない部分に大騒ぎしてる臭いがプンプンするね。
いいアプリケーションを作ってくださいねw
>>745 snprintf()ならば、十分にスレテーマに沿ってる。
なぜならgccとVCとでは、snprintf()でバッファサイズを埋め尽くした時の振る舞いが違うので。
この辺もちゃんと押さえておかないと、軽くヤバイ。
落ち着け馬鹿ども
>>751 C標準ライブラリの実装依存の話と、スレタイのWin32APIとどんな関係が?
はいそこいちいち釣られない
>>748 もう少し、未来を予測する能力を培ったらどうだろうか。
バッファサイズがのちのち変更される可能性については考えないのか?
ソースコードが別プロジェクトにコピペされる可能性については考えないのか?
バッファサイズを指定していたマクロなり定数なりの文字列でgrepしただけでは、
修正すべき場所を追跡できない。それがprintf()系フォーマット引数クオリティ。
>>748 、君は職業PGに向いていないと思う。
もし今、職業PGなのであれば、迷惑をかける前に転職してほしい。
趣味PGなのであれば、これ以上はキツク言わないよ。思う存分、使ってくれ。
共同開発をしたことのない初心者が調子に乗って煽ってただけか。 お前ら、初心者の相手して暇だな。
他人の尻馬に乗らない
アフォばっか
sprintf (buffer,"%.*s",sizeof(buffer)-1,string);
>>759 lstrcpyn(buffer, string, sizeof(buffer));
で済むことに何故sprintf()を使う。
もっと現実的なsprintf()の使用例で考えてみろ。
#define CONSTANT "editing data" sprintf (buffer, "%.*s" CONSTANT, sizeof(buffer)-1-(sizeof(CONSTANT)-1),string);
762 :
デフォルトの名無しさん :2005/12/03(土) 02:43:30
CreateFile関数が失敗した時の原因が共有違反だったか調べる方法はありませんか? 共有違反だったら他のプロセスがハンドルを開放するのを待って、 共有違反でなかったらreturnさせたいのですが。
面白いアイディアだが、遠慮なく却下させてもらう。 sizeof()に依存している時点で死亡決定。 理由はわかるな?
>>761 フォーマット文字列を変更した時の気の使いようは並じゃないな。
で、毎度毎度そんな誤りやすい計算をやるのか。
却下だ、却下。
実際そうしたことが面倒で誤りやすいからバッファオーバーフローのバグが
生じてきた「現実」があるのだとなぜ分からないのか。
単に「出来る出来ない」の話じゃないんだよ。それだけでいいんなら全部
アセンブラで書けっての。
>>763 lstrcpyn(buffer, string, sizeof(buffer));
こいつも脂肪
sizeofって使っちゃダメなの?
ソースコードをいずれコピペするであろう時のことを常に念頭に置くことだ。 bufferの部分がポインタだったとしてもちゃんと動いて欲しいのが人情。 UNICODEビルドしたときにクラッシュして欲しくないのも人情。
「明日の自分は赤の他人」、この心がけ大事。 特にハイテンションでコード書いてしまった次の日とか。
特にハイテンションでレス書いてしまった次の日とか。
>>770 ワロタw
「多い日も安心、次の日も安心」だよな、基本は。
sizeofが駄目となるとstrlen使えってことなのか?
>>772 もうネタは投下しなくていい。お前はよくがんばった。
だが、いかんせん可燃性に乏しいようだ。あきらめろ。
分かってる奴は説明省略しすぎるし、
分かってない奴は自分で調べようともしないし、
ほんと質問スレとしては最悪だな。
・sprintf()に限らず、printf()系のフォーマットの幅指定は、
あくまで最低限確保される幅の指定であって、最大限じゃあない。
よって指定幅を超えた書き込みをすれば、指定幅を超えて書き込むので
バッファオーバーフローしうる。回避方法はないのでsnprintf()系を使うべき。
参考:
>>715 >>729 >>735 >>745 ・sizeofは型及び変数のサイズ(バイト数)を返す。
文字列の長さを返すわけじゃないし、配列の要素数を返すわけでもない。
変数が配列なら配列サイズ(not 要素数)を返すが、ポインタならポインタのサイズを返す。
「ポインタと配列は全くことなるもの」という実例の1つだな。
参考:
>>763 >>766 >>768
>>774 >・sprintf()に限らず、printf()系のフォーマットの幅指定は、
>あくまで最低限確保される幅の指定であって、最大限じゃあない。
%100sと%.100sの違いも知らない池沼が何かホザいてるようだな。
ああ、精度指定(ピリオドより後)って文字列にも効くのか。うっかりしてた。
>>774 の上半分は無視してくれ。
char *buffer = new char[128]; lstrcpyn(buffer, string, sizeof(buffer)); 漏れこれではまったことあるな・・・
よん?
sprintf()は整数の場合は最大桁が予測可能だからオーバフローの心配をするまでもないのだが、 実数の場合は迂闊に%fを使うと1e300などと言う異常値が入ると300桁もの数値を吐き出しかねない。 以上を踏まえて注意を纏めてみる。 ・最小幅指定はあくまでも入力が予測可能な場合にのみ意味がある。 #入力値が異常な場合、バッファオーバフローの危険が常に付き纏う。 ・文字列→"%.*s", len, str などとして最大幅を制限する。 ・整数値→INT_MAX(或いはその他)から桁数を計算できるのその分のバッファを用意する。 ・実数値→%e/%gを精度指定とともに使うようにする。 そういう注意をした上でsprintf()を使うかCString::Format()などを使うかは強制されることではない。 まぁ、WinAPIスレだから仕方ないが世間知らずが多いよな。
780 :
デフォルトの名無しさん :2005/12/03(土) 05:40:59
やっと良スレになってきたな
781 :
デフォルトの名無しさん :2005/12/03(土) 05:43:10
だよね(^o^)
782 :
デフォルトの名無しさん :2005/12/03(土) 08:04:32
unsigned long をwin32api風に書くとどうなるんですか? UNSIGNEDは定義されてないみたいです
DWORD
784 :
デフォルトの名無しさん :2005/12/03(土) 08:40:35
ありがと
DWORD < ULONG < ULONGLONG
786 :
デフォルトの名無しさん :2005/12/03(土) 09:26:55
>>755 >もう少し、未来を予測する能力を培ったらどうだろうか。
おまえこそ気にしてもしょうがないようなとここだわってるじゃん。
>>720 についていってるのに「将来変更されたら〜」なんていつの話だよ。
将来変更される可能性なんていったって、お前の勝手な妄想だろ。
そんな一時保存的なバッファサイズだけに変更がかかったことなんて生涯を通して一度も無いよ。
お前の未来予測は当たる確率が低すぎて意味がねぇんだよw
787 :
デフォルトの名無しさん :2005/12/03(土) 09:37:47
神崎タケノリは、姉歯秀次・創価学会員に 「そうはイカンザキー!!」といったのでしょうか。 ぜひTVで言ってください。 言わないのなら、誰か誇大広告でJAROに訴えてください。 大作が草加をゴミタメにした。
>>785 俺はDWORDとULONG/ULONGLONGは別次元だと思っている。
DWORDLONGは自分では使わない。
つか普通BYTE,WORD,DWORD,QWORD
なぜWinAPIにはQWORDがないのかわからない。 DWORD64の前にQWORD作れよ。
UINT64とかでいいのに…
ULARGE_INTEGER
>>762 GetLastError()でERROR_SHARING_VIOLATIONが返ってくれば共有違反
>>786 >そんな一時保存的なバッファサイズだけに変更がかかったことなんて生涯を通して一度も無いよ。
あきれ果てた上司PGがお前をプロジェクトから外したからだ。
代わりにソースコードの後継を任されたほかのPGが大変だったわけだ。
すぐにプロジェクトから外されるお前は、未来を予想する必要がなかった。
そういう意味ではお前の言っていることは間違ってないから、安心しろ。
ネタがないからって変なケンカはやめろヽ(`Д´)ノ
全ては使用禁止でFAが出ている関数を使い続けようとするモグリのせいだ。
>>763 extern char *buffer;
こんなアホなコード書いてる訳かw
MSDNのサンプルソースで大量に用いられるsizeof演算子。 PMの判断によって開発の最前線から外された窓際PGがサンプル作成を担当している。 const定数を使わずdefine定数を使ってバッファサイズを指定するところがさすが窓際。
なんつーか、CとC++の区別がつかないおこちゃまが紛れているようだが。
>>794 実のところお前も汎用性をつけるだけつけておいて、
全くそんなことが起きたことがないってことでFAだろ?
お前の未来予測は役に立たねぇんだよ。
sprintfの使い方を知らなくて「使えねー」って騒いでいるわけか
sprintfってwindows.hで宣言されてないから嫌いですぅ
>>800 は、PGとしての適正を否定されたことがそんなにくやしかったのか?
UnixコミュニティやWindows開発チームが到達した結論を否定するだけあってアフォだな。
でもwsprintfは使える記述指定子が少ないから嫌いですお
>>803 起こりもしないような不具合想定して、
いつも職場で大声で騒ぎたてる馬鹿が掲示板で元気だなぁwおいw
>>806 John Robbinsの本でも読んどけ
関係ないことでしか反論できなくなったら終わり
John Robbinsが関係ないという人がいるスレはここですかw
結局ここでも
「sprintfでバッファオーバーフロー」と言う奴はバカばっか(
>>774 )という実例が増えただけ
ちなみに
>>765 は、sprintfのフォーマット文字列が変更される可能性はあっても
Formatのフォーマット文字列が変更される可能性は無いと言ってます。
>>806 起こるんじゃあない。起こすんだ、人間自身が。
人間のスペックを信頼している時点でお前はPG失格。氏ね。
中には「是非sprintfを使え」という人も居るかもしれないけど
普通の人は
>>737 のように、「適材適所」ということを理解してるから。
盲目的に「sprintfは使えねえ」って言う奴はバカ
これだけは確実だけどね。
「ヒューマンエラーしやすい手法をあえて使いこなしてこそ玄人」 という価値観ならば、C++は一切必要ないな、そいつには。 統合開発環境も必要ない。C言語さえ必要ない。アセンブラだけで十分だろ。 Win32API質問スレに来なくてもいいだろ、玄人なのだから。
>>812 まだ判ってないな。本物の馬鹿だろ、お前。
sprintf()がプロジェクトで使えるかどうかは、末端PGが個人判断してよいことではないのだ。
PMが一方的に使用禁止と末端PGに命令して、初めてプロジェクトの安定性が確保される。
お前の個人的判断なぞは全く重要ではない。
なんだ、「俺たち末端バカコーダにはsprintfは使いこなせない」と言いたかったんだ。
うん、俺もそう思うよ。
>>774 みたいに使いこなせないバカコーダー(ITドカタ)が
山ほどいるからね。
盲目的と陰口されようが顔色ひとつ変えずに、関数を使用禁止できるPMが優秀なPM。 使うメソッド・使うアルゴリズムを制限していくからこそ、管理が楽になる。 末端PGに自由裁量を与えているようなチームは、ダメなチームだ。
んー、sprintf使用禁止なプロジェクトってそんなに多いのかね? 一応CでもC++でも言語使用に定められた標準ライブラリに含まれるんだけど。 API以外使用禁止なんてところもあるんだろうな。
で、sprintfを使用禁止にしておきながら 「boost::formatを使え」とか、言ってるわけだよ。 大笑いだね。 標準ライブラリすらまともに使えない末端コーダーに boostの使い方を先に覚えさせようとするわけだ。 ま、確かに便利だけどね。
>>818 >んー、sprintf使用禁止なプロジェクトってそんなに多いのかね?
多い。
標準ライブラリであることは安定性に関して何の保証にもならない。
標準ライブラリが保証するのは汎用性だけ。勘違いするな。
Lhasaは全部APIでやってるそうな。
はいはい、 「バカ」はsprintf使用禁止で良いよ。 「普通の人」は別にsprintf使っても、何の問題もないから。 もちろん、個人で何か作る場合も、複数で作る場合もね。 「末端職業プログラマ」のレベルは、実際酷いもんだし バカが混じるプロジェクトで禁止するのも仕方ないかもね。 「バカの常識」を「一般人の常識」にはして欲しくないけど。
キャリアアップを目指すならsprintf()反対。 末端下請けで突き進むならsprintf()賛成。 お前らの人生観次第だ。好きな方を選べ。
>>822 バカかどうかじゃない。自分を過信するかしないかだ。
根本的に判ってないな、お前。
自分自身が末端であることを
>>774 みたいに証明してる人が沢山いるんだから
そりゃ必死になって
「sprintfを使うことの悪さ」を主張するわな。
「sprintfの悪さ」を主張しようとして、論破されちゃったもんだから。
Win32APIの質問マダー?
つまり、「明示的に禁止されているから」「バカが使い方を知らないから」以外に 「自分がsprintfを使うべきではない理由」は 何一つ挙げられないと。
>>819 「アセンブラすらまともに使えない末端コーダーに
C言語の使い方を先に覚えさせようとするわけだ。」
と言っているに等しいな。
そもそも何をもって「標準ライブラリをまともに使える」と見なすか決めるのはお前ではない。
俺がPMならお前をプロジェクトから外すだろう。標準ライブラリをまともに使えてないと感じるからだ。
このスレは釣られるバカが多くて楽しい ^^
だって、「バカが使い方を知らない」という以外に 「sprintfの悪い点」を出せないから。 出そうとして自分の無知をさらけだしてしまい 必死に論点をずらしてるだけだから。
(^o^)<YO!YO!チェケラッキョッ!
そりゃまあ、
>>774 みたいな奴がプロジェクトに入るとわかっていたら
どんなPMでも、「このプロジェクトはsprintf禁止」にするでしょ。間違いなく。
質問です! バイナリエディタもどきを作成してみたいのですが バイナリエディタにあるあのインターフェイスは GDI関数でクライアント領域に直書きするものなのでしょうか? それともエディットコントロール(orリッチエディット)で実装すべきでしょうか? ご助言をお願いします!
>だって、「バカが使い方を知らない」という以外に 「sprintfの悪い点」を出せないから。 それだけで十分だ。それ以上の理由も必要ない。 「他人に合わせたくない」という孤高のPGはずっと下請けをやってもらうしかない。 実際、業界はそうなっている。
そんな事よりstdio.hのprintfに対応するWinAPIは何ですか _printfとかあると思ったのですがないようです
だから、「sprintfの悪い点」を挙げろよ。
もちろん自分で使う上で。
末端コーダが、自分で何か作ろうなどという創造的なことをしないだろうというのは
分かるけどさ。
「自分みたいなバカが加わるプロジェクト」は大抵sprintf禁止なのはもうわかったよ。
バカがsprintfを使うのは良くないのは
>>774 で良くわかったから
普通の人が自分のプログラムでsprintfを使ってはいけない理由は?
>>835 ない。unixにもない。
_write()に対応するAPIならある。
GetStdHandle()
WriteFile()
スレ違いの話題で荒らすなぼけ くだらん論争はCスレ言ってやってこいぼけ
>>837 GetStdHandle+wsprintf+WriteFile使ってみるわ
「末端コーダーを目指す人はsprintf禁止」ということですね。
>>840 UNICODEビルドの場合はマルチバイトに変換してから出力する必要あり。要注意。
まだやってたんか('A`)
>>840 wsprintfを使う時はバッファサイズを1024以上取り、
なおかつ全体が1024以上にはならない程度の文字列にしないと。
しかも末端コーダーを目指す人は使わない方が良いらしいぞ。
>>842 Unicodeつかわね
あとWinapiでstrlenに対応する関数はどれですか。
lstrlen
ありがと
>>755 はもしかして
char buff[BUFFER_SIZE];
sprintf(buff, "%.200s", s);
みたいな使い方を想定してるのか?
明示的にdefineした定数の数字を想像して%.200なんて書く奴なんか居ないよ。
逆に
char buff[200];
の"200"という数字をgrepするというのなら、
defineやconstを使わないで200という重要な数字を生で書いているということだよな?
もちろん、ローカルのバッファならそれで充分だが
そんなのgrepして見つかっても書き直すわけ無いし。
逆に引数等でバッファサイズが与えられるなら、必ず.*を使うし
どう考えても「バッファサイズを変更する
>>755 の状況」が想像つかないね。
俺には。
>>849 入力側の予想されるサイズが変わった時のコストを考慮してないのは、何故だ?
わざと無視してるのか?
>>833 APIの質問でなく、機能の実装方法だからスレ違いな気もするが・・・
くだらない論議にうもれてしまいそうで、かわいそうなので、
どういう仕様のエディタを作るかによるが、GDI直書きがおすすめ。
(リッチでない)エディとコントロールは64K文字しか扱えないので、
バイナリエディタじゃ足らないでしょう。
リッチエディトで頑張ればそれなりの物は作れるが、バイナリエディタなりの
カーソルの動き等を実装しようとすると、かえって大変。
自分で全て制御・描画するほうが最初は手間がかかるが融通が利く。
852 :
833 :2005/12/03(土) 16:18:47
>>851 あ、ありがとうございます!
スレ違いでしたか、にもかかわらず答えていただいてありがとうございます!
直書きでやってみます!
>>850 ん、ちょっと真面目に議論しようよ。スレ違いだけど。
他との関連があるバッファだったら、
(例えば構造体のメンバとかで他と受け渡しするものなら)
defineなりsizeofなりを使って、バッファサイズを取得するでしょ?
つまり、"%.200"というリテラルを使うことはあり得ないわけ。
動的に確保したサイズを渡す場合にしても。
逆に、ローカル変数でのバッファだったら、その関数内で完結するわけでしょ?
その場合は、バッファの大きさが数字で直接書かれているだろうけど
そのバッファを使用するのがそもそも関数内だから
バッファサイズを変更したら、そのバッファを使っている部分(関数内)を一通り見て
影響がないか確認するのが常識じゃないの?
もちろん、「その程度のことすらまともに出来ない人間」が存在するのは確かだけど
「自分で作って自分で使う部分」なら問題にならないんじゃないの?
それに、例えば数字→文字列とか、ディレクトリ+ファイル名+拡張し→文字列
みたいなのは、ある程度上限があるから、
あらかじめ余裕をもって確保するべきだと思うし。
示し合わせて他所へ行けっての
>>849 は書式に関する深い知識と経験を用いて、
書式文字列をsprintf()で作ってからsprintf()を実行するから、なんら問題ないよ。
それができないお前らは(ry
>>852 VB使って、あの表示部分をユーザーコントロールとして作ってしまう、
もしくは、VCなら1個のクラスでまとめてしまうと楽
,,,,_ /,'3 `ァ <もうだめぽぉ `ー-‐`
要するにだな、
>>755 が全ての答えだ。
>>755 の文意を理解できた人間は職業PGを続けていい。
>>755 の文意を理解できない人間は即刻職業PGをやめろ。
>>853 うざい
スレ違いだとわかっているなら他所へいけぼけ
そんな判断さえできんやつが屁理屈こねたところで
どうせロクなコードは書けん
わかったら消えろぼけ
>>755 の文意を理解できた人間は末端コーダーを続けていい。
>>755 の文意を理解できない人間は即刻末端コーダーをやめろ。
sprintfの悪いところは、末端コーダーが使いこなせないことだから。
要するにここまでの議論を読むと結論は、
糞PGの集団は、
>>755 に従えってことだね
職業PG=薩長軍 アマPG=彰義隊・新選組 派手なのはどっち? 強いのはどっち?
この手の標準?APIの使い方というか、危険、安全の議論をするスレは無いの? 無いんだったらここでいいじゃん。
お久しぶりです(^o^)
さっそくですがツールバーやメニューバーに視覚スタイルを適用する方法を教えてください(^o^)
他の掲示板にいったけど完全にスルーされたので戻ってきました^^
http://up.mugitya.com/img/Lv.1_up12444.jpg メニューバー・ツールバーを作ってみたら、上の奴のようになってしまうのです。
下や真ん中の奴のように視覚スタイルを適用したいのですがどうすればよいのでしょうか?
DrawThemeBackgroundでできると思ったのですが、それらしい定数が見つかりません(分かりません)
何卒お願いいたします(^^)
職業PG=前田利家 アマPG=前田慶次 ただし、漫画じゃなくて史実の方。
870 :
デフォルトの名無しさん :2005/12/03(土) 17:03:24
sprintf()の利点って「標準である」ってだけだろ。 このスレで議論されてるようなWin32APIを利用するバリバリ環境依存 プログラムでわざわざ(_snprintf()ではなく)sprintf()を使う理由って あるのか?
MessageBox(NULL, "
>>1-1000 スレタイ嫁", "もちろん、オレモナー", 0);
apiならwsprintf
vsprintf()は使うな、でFA?
引き継いだ香具師がアフォだったんだろ
>>806 お前みたいなやつが2000年問題を引き起こしたんだということがまだ分からんのか
くどい
2000年問題は空騒ぎにしか思えんな
>>834 最近のプログラムの品質が落ちたのはそのせいか
>>875 俺にとってはフクザツな書式指定と計算を使ってまで、わざわざsprintf()を使ってる
奴の方が余程アフォだな。
_snprintf()ならば、そのコードで「バッファオーバーフローが起きない」ことを
はるかに簡単・確実に保証できるのに。
無論C++なのにsprintf()使ってる奴は、「論外」な。
>>879 便利な道具があるのにそれを使わない奴は一生ハンドアセンブルしてろってこった。
ま、一方で「便利な道具」にプログラマがスポイルされたことは、否定しない。
スレの質が急激に低下しております
どうして適切なスレがあるのにここで続けようとするんだろう
>>851 64k制限って2k/XPあたりではなくなってるんじゃなかったっけ?
>>833 あわれだなぁ。もうちょっとタイミングいい時にくればいいのに。
>>833 SPYか何かで、既存エディタが何使ってるか
調べてみればいいかも
隔離されてることも気付かず議論してる様はすごく笑える。
誰か
>>779 の検証、解説してくれ。
>>779 はsprintfを使うなと言ってるのか使ってもいいといってるのかどっちだ。
質問です apiとmfcは同じようなものなのですか?理解が進んでいないので抽象的な質問しかできないですが、この2つの違いをご教授していただけたら幸いです
違います Win32APIはWindowsのシステムが提供する機能を使うための関数インターフェース群 MFCはそれを使いやすくした「クラス群」 APIはCとかC++とか関係無いが、MFCはCじゃ使えない
>>889 MFCはAPIを使うクラスライブラリだからコーダーを目指さないsprintf使いには不要
とか回答するとスレ違いになるのか?
MFCならCString::Formatがほぼsprintf
sprintf厨 Uzeeeeeeeeeee
>>889 MFCは糞である事を覚えておいて損はないでしょう
VCL最強
リッチテキストっつえば、EM_FINDTEXTには 後方検索の機能がないんだけど どっかに隠し機能としてでもあるんだろか? 今は、2進探索と組み合わせてなんとか実現してるんだけど メガ級のテキストになると遅くて遅くて。
Delphi厨だけど何か質問ある?
>>755 みたいな人って職業PGなの?
こんな口調の書き込みは餓鬼がしてるものだと思ってたのだが。
それが参照している748のほうが餓鬼に見える。
あれ?ここ職業PGいたの?
MessageBox関数が導入されたのはいつぐらい? 古いドキュメントが手元にあるんですがWindows3.1ぐらいから存在してることは確かですが…
まあMessageBoxが要Win98/2kあるいはIE4以上だったら救いようがないな。 ところで9xにもMessageBoxWがあるのはありがたい。
>>900 2chはおとながこどもに、こどもがおとなになるワンダーランドなのです
僕も子供になっておっぱいわしづかみして甘えたいよ ママー
907 :
755 :2005/12/03(土) 22:32:23
>>900 たまにはキレることもあるさ。
ついつい自分の体験がオーバラップしてしまったもんで。
やっかいなのは、「俺って玄人だから必要ない。」というタイプ。
こういうタイプを真っ先に開発から排除する必要がある。
こういうタイプが入るとえてしてソース管理がいい加減になる傾向に・・・。
バカが自分でわざわざ仕事増やしてるんだから、当然そうなるわけで。
応援 どうもありがとうございます...・゚・。・゚゚・*:.。 .・゚・☆ ./⌒丶、 , イ (丶 `丶. __ __ .. , .イ ソ ミ . `丶、 ヽ、 , ´ ,.-〜へヽ / 彡 ミ `丶、 ヽ、 \ /ヽヽヾ〈 __ ハ V 彡 乂ヽ ヽヽ ヽー\il i il ハ ! } ノ ,ィオ f-;〈 ソ あなたもあるぅ〜 翼があるぅ〜 ( \ヽヽ ヾ ヽ ヽヽ V il 〉 ハ { __ i ツ ( \ ヽヽ ヽ ヽヽ V// //ソ ` ´ } シ 飛び立つのよぉ〜 空へと〜 ♪ \__ ヽ ( (.__ヽヽ }i ノ ノ イ ァrr‐く' ゝ.__ (__ __ <r'< 〈 / /i|ー- 、 > .__ / トv ハ 〉 / リ ヽ ( __ _/ .| 〉V/ i〉 } 美しいわぁ〜 しあわせでしょ〜 ノ! |/ ヽ. リ ,' // | |{ リ / 風にのり〜 虹をわたろぅ〜 ☆ 从i l|`ヽ. |`ー -- ---く! /_ >-‐‐ } !. ,' } ノf i >' イこ i ! ノ / 〉 ,. --'´に.. l ヽ.___ < __ ___j i______ ,.- ' ` ̄ヽ! ノ みなこ . . / `ー─ -- -- -- ─ "´
>>878 年末返上で必死に対策した香具師らにあやまれっ!
>>900 自分がソースを追えない責任を関数に求めているだけだからスルーしろ
「派遣」「使い捨て」「最底辺」「コーダー」「プライド」あたりがキーワード
>>853 でFAだと思う。俺。
sprintf使っちゃ駄目とか言ってる奴は
どう考えてもちょっとした不具合例に挙げておおげさに言いすぎだと思う。
914 :
デフォルトの名無しさん :2005/12/04(日) 01:12:40
>>753 snprintfってC標準ライブラリ?
scanf 最強!
漢なら gets !! gets 最強伝説
sscanfは16進文字列から数字に直すときによく使った希ガス
>>916 すまんがscanfとはどんなAPIですか?
バッファオーバフローノーケアな標準関数だけを使って ノーバグでセキュアなプログラムを作るコンテストとかやったら おもしろそうだ。
scanfは書式が実行時でないと決まらんから 余計な変換手順も持ち込むんで オブジェクトがばかでかくてカナ湾
アプリケーションソフトってのはな、動作が重いほうがありがた味が増すんだよ。 勿体つけて処理した方が一般人は凄いことやってる錯覚に陥ってくれる。 お前らCプログラマがコードを高速化したところで、かえって一般人から軽んじられるんだよ。
ヒドイアリサマデスネ
>>923 そう思うのは本当の初心者だけ。
処理が単純なのにやたら重いソフトはMFCを必要以上に使ってるとかバレバレ。
ましてやそんな理由で無駄にSleepとか使ってわざと重くしたらすぐわかる。
ヒドイアリサマデスネ
>>923 あまりにひどいと自分で組んでフリー公開したくなる
928 :
デフォルトの名無しさん :2005/12/04(日) 08:02:12
LoadImage, SetPixel, GetPixelの DIB版がありましたら教えてください。
やはり決め手はプログレスバーだな。 1つのファイルの処理進行状態で1つ、全体の処理の進行状態で1つの 2つは用意できるとユーザーも大喜びだ。 もちろん処理が一瞬で終わるからといって一瞬で終わってしまっては意味が無い。 意味もなく処理に時間をつかうんだ! DirectXのシェーダ機能を無理やり使ってPCからキーン・・・という音を出せばGOOD!
プログレスバーは偉大だな。 ほんと、プログレスバー様様ですよ!
>>923 初心者は声を揃えて言います。
「ノー○ンは最強のセキュリティソフトだ!!」
以下は実話をTVで再現する番組で見たやつ ↓ ある優秀な鍵業者がいた。 彼は、鍵を閉じ込めてしまった客の緊急依頼に即座に駆けつけては 短時間で開錠するサービス熱心で真面目な男だった。 その鍵業者があまりに簡単に開錠するので、値切ったり金を払わずにすませようとする客が多かった。 ウンザリした鍵業者は仕事を止め、開錠の専門学校を設立することにしたのだった。
>>929-930 プログレスバーは控えめに小さく出して
画面真っ暗にしてディスプレイが鏡のようになるようにする。
「この待ち時間に身だしなみを整えてください。」
お前ら、バカばっかりだな。 客からすれば、業務ソフトとゲームソフトの違いなんてないんだよ。 遊園地のアトラクションで長時間乗ってたら料金が多くかかるだろ。 同じように鈍行列車に乗ったほうが料金が多くかかるものなのだと客を躾ければいいのさ。 新幹線?航空旅客機? 技術の無駄だな。
>>925 >処理が単純なのにやたら重いソフトはMFCを必要以上に使ってるとかバレバレ。
MFCさんをいじめるな!!
そんな奴はAPI直書きでもタコソースを書く。
>>918 単に16進法文字列からなら数値にしたいだけならstrtol/strtoulなんかで十分だ。
>>936 別にMFCが悪いとは言ってないが。
ただ使う場所を間違えると速度が遅くなるかと。
全部VCLな漏れには関係ないさ(*´ω`*)
>>939 使う場所間違えると遅いのは、STLやboostでも同じッスよ。
つか、ライブラリなるものは全てそうでしょ。
とりあえず、
MFCさんをいじめる人はボクが許さない!!
MFCはスレ違い うせろ
あーあ、
>>943 のせいでスレが急に寒くなったな。
423GJ
プログラムから環境変数を設定したいんだけどどうすればいいですか
石やーきいーもー おいもー
>>947 SetEnvironmentVariable
951 :
デフォルトの名無しさん :2005/12/04(日) 15:15:20
こんにちは、よろしくお願いいたします。 vc++でプログラムを作っていますが、 exeファイルの存在するフォルダに datファイルを、おいて、参照あるいは、書き込みをしています。 datファイルのパスはGetCurrentDirectoryで収得して、 変更できないよう最初1度だけ読み取っています。 それで、違うフォルダーのテキストファイルにアクセスした場合、 そこのフォルダーで、どうも、datファイルを探している場合が、 ちょくちょくあります そういうことは、皆様ありませんでしょうか。
あなたの場合、日本語の勉強が先でしょう。
関係あるかどうかわからんが GetCurrentDirectoryが必ずしもexeのあるフォルダを指すとは限らんよ
DOSさわったこと無いプログラマが増えてきたんかな。
>>951 GetModuleFileName使えば?
>>956 WinNT系ならレジストリいじればいいはず。
Win9x系なら非公開APIを使ってシステムの環境変数領域を取得し、
メモリの内容を直接書き換える。
>>929 >DirectXのシェーダ機能を無理やり使ってPCからキーン・・・という音を出せばGOOD!
おいおい、それ俺のNEC Lavie のノートPCだおwwwwwwっww
画面のスクロールするとキーンwww
GetOpenFileNameへのコントロールの追加を「CreateWindowで」動的に、 行いたいのですが、次のようなHookProcではうまくいきません。 具体的には、ダイアログの描画が適切に行われず、画面が乱れます。 どうしたらよろしいでしょうか? UINT_PTR CALLBACK OFNHookProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG : { 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; } } return 1; }
960 :
デフォルトの名無しさん :2005/12/04(日) 18:32:28
>>951 です
>>952 さんそうですね。日本語難しいです。
>>953 さん。
確かにexeを指すわけではないようなので、
一番最初の立ち上げにカレントフォルダを取得したらいいのかなと思っているのですが。
>>954 さんdirやcd なんかしかつかわなくて、
>>955 さんへ。
一度試したのですが、最初からうまくいかなくて、
どううまくいかないのか、よくわかりません。
ので、もう少し試してみます。
皆様いろいろありがとうございます。
>>960 GetModuleFileName (GetModuleHandle(NULL),buff,sizeof(buff)-1);
こいつからdatファイルのパスを生成汁
>>961 をもう少し丁寧に言うと
GetModuleFileNameで実行ファイルのパス取得
↓
PathRemoveFileSpecでファイル名部分を削除
↓
PathAppendでそれとdatファイル名をくっつける
↓
datファイルのパス完成
>>962 駆け出しの頃に誰もが困惑した経験があるのが、バックスラッシュの切り出しだよな。
【初心者へのお題】
以下のフルパスからディレクトリ名とファイル名を分割せよ。
ただし、tchar.hとC標準関数を用いること。Win32APIは使用禁止。
C:\噂の真相\一覧表\赤十字.doc
スレ違いだゴルァ
965 :
デフォルトの名無しさん :2005/12/04(日) 22:20:49
今アプリケーションを作成していまして、検索ダイアログを 作ったのですが、いったん検索ダイアログを閉じてしまうと、 CFindReplaceDialogオブジェクトがNullになってしまうので すが、どうにかして状態を残しておくことはできないでしょうか? CFindReplaceDialogオブジェクトを残しておきたい理由としまして、 ダイアログを閉じても、F3ボタンで検索の続きができるように したいのです。どなたか教えていただけないでしょうか?
スレ違い
967 :
デフォルトの名無しさん :2005/12/04(日) 22:29:51
何だったか忘れたけど日本語対応の jstrrchrって関数がついてるコンパイラがあったなぁ
そんなのはMSC/VCにもあるぞ。
970 :
デフォルトの名無しさん :2005/12/05(月) 13:10:50
>>970 BITMAPFILEHEADERのbfOffBitsパラメータを参照してるだけ
>>970 bufが指す位置にはBITMAPFILEHEADERがある。
っていうか、そのプログラム合ってる?
offset=のところ、*が1個多くね?
>>972 bufはLPBYTE*だからあってるよ。
974 :
970 :2005/12/05(月) 13:44:04
ありがとうございます。
>>971 なるほど。分かりました。
ビットマップファイルを作るときそこに値を入れますもんね。
>>972 VCとBCCで一応正しく動作しています。
DIB系のは、サイトに載っているのがグローバリー変数なので、
ローカル変数で出来るように意識したんですが、
記述としてよい書き方かは、良く分かりません。
975 :
970 :2005/12/05(月) 13:45:14
>>973 ウホ ほんとだ。よく見てなかった。
bufはLPBYTEだと思い込んでた。
977 :
959 :2005/12/05(月) 16:18:41
無理なんでしょうか
978 :
デフォルトの名無しさん :2005/12/05(月) 16:47:43
スレッドの中から自分を Create したときの ハンドルを取得したいと思い スレッドの中で以下のようにしました HANDLE hThreadFake = GetCurrentThread(); HANDLE hThreadReal; DuplicateHandle( hThreadProcess, hThreadFake, hThreadProcess, &hThreadReal, 0, FALSE, 0 ); このようにして得られる ハンドル hThreadReal が このスレッドのハンドルではなく なぜか,次にスレッドを Create したときの ハンドルになります. なぜこのようになるのでしょうか?
979 :
デフォルトの名無しさん :2005/12/05(月) 18:01:53
GetMessage()でユーザからのメッセージをmsgに格納し, それをDispatchMessage()でウィンドウプロシージャに渡す事は解りましたが。 例えばウィンドウA,Bを作成し、ウィンドウAへのメッセージとウィンドウBへのメッセージも このメッセージループで取得されますよね?そしてDispatchMessageで適当なウィンドウプロシージャへ 送出するのですが。 この送出先というのは、DispatchMessageがMSG構造体のメンバHWND hwndから判断してるのでしょうか?
>>979 それは違う
そこに来るのは自分宛のMsgのみ
DispatchMessageで回ってくるMsgとは別に
Windows自身がMsgキューを持っている
そちらにはどのWindowsへ送るMsgかのハンドルを持っている
>>981 ??????????
別々のウィンドウでも同じアプリケーションのものなら単一のメッセージループですが?(一部除く)
>>979 のウィンドウA、Bもそういうことだろ?
>>959 なんでそんなめんどくさいことしてんの?
lpTemplateNameじゃ駄目なん?
984 :
デフォルトの名無しさん :2005/12/05(月) 22:09:48
>>962 さん丁寧に教えていただきありがとうございます。
その通りにするとちゃんとできました。
>>963 さん
char *Getdictory(){
char moji[] = "C:\噂の真相\一覧表\赤十字.doc";
int mojicount = strlen(moji);
char damy[mojicount+1];
int i,j;
for(i=0;i<strlen(moji);i++){
if(moji[mojicount-i]=='\\') break;
}
for(j = 0;j<i;j++){
damy[j] = moji[j];
}
damy[++j]='\0';
return damy;
}
こんな感じでしょうか。コンパイラーは通してないですが、
場違いですみません。
985 :
デフォルトの名無しさん :2005/12/05(月) 22:13:49
>>984 訂正
for(j = 0;j<i;j++){
ここちがう。
for(j = 0;j<mjicount-i;j++){
まちがいだらけかも。
>>982 >同じアプリケーション
同じスレッドでしょ
>>984 IsDBCSLeadByte, CharNext あるいは mbcs 対応の crt 関数使わないと
'\\' を正確に判断できないよ
その前に int mojicount = strlen(moji); char damy[mojicount+1]; なんだよこれ 初心者スレ行け
元のコードを結構修正することになるけど、CharNextのほうが986のより楽。
>>987 C99という可能性はまだ消えていない。
>>987 確かに。
スペルはdamyじゃなくてdummyだわな。
話にならん。
WM_MOUSEMOVEメッセージについてなんですけど、 マウスカーソルがスタティックテキスト(含むグループボックス)の子ウィンドウ上の時にはメッセージ来るようなんですが、 他の子ウィンドウ(エディットコントロールやチェックボックスなど)上だとメッセージが来ないようなのです。 うまくスタティック以外のウィンドウ上でのマウスカーソルの動きをキャッチする方法はないのでしょうか。
992 :
959 :2005/12/05(月) 23:57:31
>>983 任意のhWndを持つウィンドウの追加が動的に行えればそれでも
構いません。ただし、.resファイルなどは一切使用しないことが
条件なのです。どうすればいいでしょうか?
Z
1000なら元カノをレイープ
>>995 犯罪予告すると、かなりの確率で警察のお世話になるよ。
大丈夫、元カノはくたびれた南極ちゃんだから
1000
1000
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。