荒れてるのはいつものことなので 気にせず質問したらいいと思うよ
>>1 乙
いつも思うんだけど、Advanced Windowsのとこは注意書きか何か
あった方がいいんじゃないかな?
よく入門書と間違えて買う人いるし。
入門書だろ
むしろとりあえず読むべき入門書なのにタイトルで損してる本だよな
つーか間違えて買ったら何か問題でもあるのか?
12 :
デフォルトの名無しさん :2009/06/04(木) 11:23:55
COMBOBOXとCOMBOBOXEXはどう違うの?
EX
14 :
デフォルトの名無しさん :2009/06/04(木) 11:29:28
そのEXが分からないんだが。
EXで増えたメッセージ(CBEM_)関係を読めば数分で理解できると思うが 大きい違いはアイコンとWindows9x+IEでのユニコード対応
MSDNも読まんアホは永遠に分からなくていいよ。
17 :
デフォルトの名無しさん :2009/06/05(金) 10:45:29
UACで制限ユーザから管理者に昇格して実行されているプロセスから、 昇格前のユーザを知る方法ってありませんか?
またウィルスか
どういう状況なんだろう
すまないがWin98、もしくはWinMeの環境ある人居ない? ちょっとしたコードが、Win98、Meできちんと動作するか確認したいんですが 環境が無い為、自分では確認出来ません 確認したいソースだけupしますので、ビルドから確認まで協力してくれないでしょうか? 確認はファイルをD&Dするだけですので、一瞬で終わります
VMWare でも使えよハゲ
>>21 VirtualPCもたしか無料だったはずだよ
>>22-23 レス有難うございます
肝心のDiskが無い為、仮想環境が作れないでいます
98、Meのisoは配布されてましたか?
MSDN に入ればダウンロードできるだろ
>>24 ないのね、明日で良ければやりましょうか?
98SEしか手持ちがなかったはずなんでご期待に沿えるかは分かりませんが・・・
あとできたらバイナリで欲しいなぁ、仮想環境構築からビルド環境までって時間かかりそうだし
ビルドからやらないと実験になりませんか?
>>25 MSDNに加入とはお金が掛かるのでしょうか?
>>26 すみませんが、お願い出来ますか?
Win98SEでも十分です!
バイナリでも良いですが、バイナリでupすると不信に思われると思い
ソースでupを考えておりました
バイナリで宜しければ、バイナリでup致します。
>>27 MSDN購読はたしかお金かかりますよ
適当なうpろだにでも上げといてください、拾って実行します
あと、できたら他のスレ移動したいですね、ここ質問スレだし
hoge1すげーw
MSDNではWinXP以降しか手に入らないよ。 MS-Java絡みの関係で、9x系に加え2000以前も全部駄目になっている。
じゃあWindows9x系での動作確認をしたかったら中古で買うか もしくは割れてるのを手に入れるかしかないのか・・・
つーか9x系に対応したソフトを作る人ならOSぐらい持ってるだろ なんで持ってないOSまでわざわざ対応する必要があるんだよw
持ってないけど少しでも使ってくれる人増やしたいから対応するってのはあると思うよ まぁMSが見捨てたもんに対応なんて今さらって気はするが・・・
WM_CREATEで-1でなく1を返すコードを見たんだが これは何か意味があるの?
39 :
37 :2009/06/06(土) 21:47:25
>>38 もちろん俺もそこ見たけど -1(たぶん)と 0 の場合しか書いてなかった
1の場合普通に成功するんだが
WM_CREATEの戻り値ってなんかに使用されるっけ?されないなら別に気にしないことにする
ほかの可能性としては、0と非0を返すWM_NCCREATEと勘違いしたとか。
41 :
37 :2009/06/06(土) 22:35:18
>>40 うーん、俺の見たコードではWM_CREATEやWM_LBUTTONDOWNで1を返してた。
まぁいいや、気にしまい。スマン
>>39 -1を返すとCreateWindowExが失敗してNULLを返す
って書いてあるだろ、しっかり読め
あれ? MSDNオンラインとオフラインで書いてあることが違う?
「ン」と「フ」が違うからな
>>38 化けてるな。マイナス記号がU+002DじゃなくてU+2013という罠。
マイナス記号が化けてるからMSDN読みませんってか
U+2013 って – だろ? 化けるフォント使ってる奴が悪いんだろ
ステータスバーを最下部に配置してるんだが メインウィンドウとの境目に境界線って消せない? それとも境界線自信メインウィンドウの物?
ハァ?
ステータスバーっぽいウィンドウ作って配置するとか
スクロールユーティリティ作っていて、標準スクロールバーを持つコントロールの スクロールバーのサムの位置をダイレクトに変えたい。 WM_VSCROLL/HSCROLLで SB_LINEUP/DOWN, SB_PAGEUP/DOWNは動くけど、 SB_THUMBPOSIION(またはSB_THUMBTRACK) 送っても反応しないものがある。 エディットやリッチエディットなどは問題ないけど、Janeのスレビューの部分の TMDITextViewなどは動かないんで、 SetScrollInfo(またはSetScrollPos)で無理やり位置を変えてから、SB_THUMBPOSITIONを送ると動いたりする。 (でもビジュアルスタイルを適応していると動かない) 独自コンポーネントの仕様だと言われればそれまでなんだろうけど、 Spy で調べたのと同じメッセージを送っても動かないのは何でだろ?
独自コンポーネントの仕様です。
55 :
デフォルトの名無しさん :2009/06/08(月) 17:00:03
システムメニューじゃなくてタイトルバーの下にあるメニューを列挙するAPIを教えてください
ウィンドウに対してGetMenuしてうんぬんかんぬんする
57 :
デフォルトの名無しさん :2009/06/08(月) 17:07:28
>>56 あ、ありがとう。
それだけわかれはうんこが漏れるほどわかりますた
基本メインウィンドウ隠してる時にポップアップメニューを出すようにしたんだが WM_HOTKEYでSetForegroundWindowー>TrackPopupMenu の処理すると、ポップアップメニュー以外をクリックしても閉じるけど WM_TIMERで同じ事やると、メニューが閉じない 一応メッセージフックして違いを見たけど、解決に至らなかった 良い方法はないだろうか?
59 :
デフォルトの名無しさん :2009/06/08(月) 21:07:08
>>58 TrackPopupMenuのあとにWM_NULLをポストする。
エクスプローラとかについてる進む・戻るボタンみたいな、 ボタンの脇に▼がついてるボタンのことなんていうの? ナビゲーションボタンであってる?
特に名前はないだろ
ドロップダウンボタンだろ
スプリットボタン
TBSTYLE_EX_DRAWDDARROWS BS_SPLITBUTTON ツールバーだから、ドロップダウンボタンという事になるのかな。
65 :
58 :2009/06/09(火) 11:37:35
>>59 試して見ましたが駄目でした
WM_NULLはタスクトレイから操作された時に必要のようですね
質問です。 WNDCLASSのlpszClassNameに設定するクラス名の文字列のポインタのことなんですが、 このポインタが指す文字列は、RegisterClass後も、 そのままメモリ上で同一の内容で存在し続ける必要があるのでしょうか? 例えばlpszClassNameに設定した文字列のポインタが、 mallocによって確保された領域を指している場合、RegisterClass後に それをfreeしてしまっても問題が起きない保障があるのか、、が気になります。
開放しても大丈夫
分かりました。ご返答ありがとうございました。
いやどうかな
普段は単なる文字列リテラルを使っていたから考えもしなかったが、リテラル文字列は メモリ上に永続していることが多いのか。
というかまあ、常識的に考えれば、文字列へのポインタを引数にとる関数が、制御が帰った後も その文字列が永続してなきゃいけないような変則的な作りだったら、ドキュメントにそう 書いてあるはずだ。
strtokとかか
RegionをSelectObjectした時の記述が無い?
>>70 つーか文字列リテラルが永続しない場合ってどんな時だ?
エディットコントロールに対して文字を追加する方法はありますか? SetWindowTextだと全て描画しなおしになってしまうので。
自己解決しました。EM_REPLACESELでいけました。
>>76 うろ覚えですまんが、確かSendMessageとか使うんじゃなかったかな
>>74 永続する保証がない以上、永続しないケースがあると考えておかないと。
言語によってはガーベジコレクトされるかもね。
DLL内の文字列とか、DLLをアンロードすれば読めなくなる。
>>76 EM_SETSEL (-1, -1) → EM_REPLACESEL
>>81 アンロードしてもすぐには消えないことがあるからタチ悪いよな。
マルチスレッドで、 スレッドAの処理Bと、スレッドCの処理Dを排他的に処理したい (同時進行で処理したくない)場合、一般的にはどうするの? これ! っていうAPIがあったりする?
Mutex とか CriticalSection とか
InitializeCriticalSection(&cs); EnterCriticalSection(&cs); EnterCriticalSection(&cs); EnterCriticalSection(&cs); ... てやると、普通に最後まで実行できるんだけど、なぜ? この場合って、二回目のEnterCriticalSectionで永久ループになるんじゃないの??
csを獲得済みだから
http://msdn.microsoft.com/en-us/library/ms682608.aspx After a thread has ownership of a critical section, it can make additional calls to EnterCriticalSection or TryEnterCriticalSection without blocking its execution.
This prevents a thread from deadlocking itself while waiting for a critical section that it already owns.
The thread enters the critical section each time EnterCriticalSection and TryEnterCriticalSection succeed.
A thread must call LeaveCriticalSection once for each time that it entered the critical section.
unsigned charのSHIFT JIS文字列をcharのSHIFT JIS文字列に変換する、もしくはその逆は可能でしょうか?
>>89 (char*)とか(unsigned char*)とかキャストするだけ。Win32APIの出番ではない。
C++ならreinterpret_castな。
_com_ptr へのポインタなんだけど IHogePtr phoge; IHoきいせかす *pphoge = &phoge; とすると&のオーバーロードで入れられないんです。 どうしますか?
使い方がおかしい というかスレ違い
>>91 IHogePtrへの参照で我慢するか、boost::addressof
DrawCaption(hWnd, hDC, &rcCaption, DC_ACTIVE | DC_GRADIENT | DC_TEXT | DC_ICON | DC_BUTTONS); このようにしてDrawCaptionをDC_BUTTONSフラグを付けて呼び出してもボタンが描画されないのですが なぜでしょうか?
次にお前は「OSは2000」と言う!
96 :
94 :2009/06/13(土) 22:42:02
すみません、OSはXP SP3です。。。
EnterCriticalSection て、例えば beginthread でスレッドAとBをつくったとして、そのAとBの間で 同期する場合にしか使えないの? beginthread でスレッドを1つだけつくった場合に、 プログラム本体側と、スレッドの間で同期はできないの?
>>98 何言ってんのか正直わからんが、おまえの言う「プログラム本体」も
スレッドなので「スレッドAとB」の場合と何もかわらんよ。
Advanced Windows読んで出直してこい
つーか、beginthread なんて使わずに、ちゃんと CreateThread() 使え。
俺はbeginthread派何だが、CreateThreadの方がやっぱりいい?
俺はThread.Start()派
CreateThreadのメモリリーク問題ってなんでマイクロソフトは10年経っても治さないの?
いろいろ面倒だからじゃね? 俺は面倒だから_beginthreadex使うけど。
>>103 もう直っている。
Windows Server 2003でFlsAllocと言う関数が導入された。もちろんVistaでも使える。
これには、スレッド終了時に呼ばれるコールバックを登録する機能が付いており、
CRTもこれを使ってのリソース解放ができるようになった。
XP以下放置かよ、と思うならDLL版CRT使えばいい。
いつも_beginthreadexじゃなくて_beginthreadのほう使ってるけど いいの?
>>106 今話題になっている件については問題はない
ただし、他にも違いがあるので _beginthreadex にしておくのが無難、MSDNを読んでおけ
______ \| (___ ♪ |\ `ヽ、 | \ \ ∧ ∧ | \ 〉 (*`q´) | ♪ \ / ‖( つ| ̄ ̄ ̄ ̄ ̄ ̄! ̄ ̄ ̄ ̄ ̄ ̄ノ ‖( 匚______ζ--ー―ーrー´ 〓〓JJ .‖ || .|| ‖ ‖ ||
質問です。 フィルタドライバを作らずにリアルタイムでオーディオデバイスから出力されるサウンドを加工することは可能でしょうか? もし可能ならやり方の概要を教えてください。
110 :
109 :2009/06/14(日) 18:25:58
オーディオデバイスから出力される直前のサウンドを加工してから出力したいのです。
ASIOとVSTプラグインを使えば普通に可能だろ
携帯電話は高いよ〜。 ピッチがオススメ! 俺はNTTパーソナルだけど、この前サービスが始まったASTELが気になる。
非同期ソケット通信でWSAAsyncSelectでメッセージを受け取らずに 自分のスレッドで接続したかどうかを識別する方法を教えてください
もひとつ質問ですが
WSAAsyncSelectのFD_CONNECTをしてからconnectしますが
サーバーから応答が無い時はだいたい30秒くらいで
メッセージが返ってくるのですがこれのタイムアウトはどうやって設定するのですか?
ちなみに、
>>113 もFD_CONNECTの話です。
しつもんです。 Windowsが起動してからの 任意のドライブ(物理 or 論理)の 総書き込みバイト数 総読み込みバイト数 をいちばんシンプルに取得する方法はどんな方法でしょうか? その手のデータを表示するソフトがあるのですが、 OSを起動させてかなり時間が経過してからアプリを起動しても、 OS起動からの正しい数値が表示されます。 常駐してカウントしてるわけではないんです。 これは、どこから取得しているんでしょうか?
>その手のデータを表示するソフト 具体的に頼むわ
>>116 HDDLed Indicator
インジケーターにカーソルを合わせると
OS起動時から起動しなくてもきちんと
任意の物理/論理ドライブのreadとwriteの累積バイト数が出ます
これ、どうやって取得してるんでしょう?
パフォーマンスカウンタ
fsutil fsinfo statistics で見られるのだから、どこかに記録されているのは確か。 パフォーマンスカウンタかWMI辺りなんだろうけど。
NtQueryVolumeInformationFile辺りだな
間違えた DeviceIoControlでFSCTL_FILESYSTEM_GET_STATISTICSだった
123 :
デフォルトの名無しさん :2009/06/17(水) 14:00:04
クライアント領域が透明なウインドウをつくるとき、エディットコントロールみたいな子ウインドウではできない?
何を言っているのかよくわからないが、リージョンを使う分には問題ないだろ LayeredWindowは無理かもしれんが
背景ブラシの色を0x00000000に
ReadDirectoryChangesWで、変更されたファイル名の終端にゴミ文字がある場合があるんだが これは仕様? バッファは呼ぶ直前に0クリアしてる
有効なサイズは返しているのだから、 後はどんなゴミで埋められようがガタガタ抜かすな、ってスタンス?
>>127 使用する領域はちゃんと確保した領域にしてる?
ポインタだけ宣言してどこ指してるか不明なまま使ってるとかじゃない?
最前面表示のウィンドウよりも手前に表示されるウィンドウってどうやったら作れますか? 最前面表示ウィンドウ同士だと、通常のウィンドウのようにアクティブな方が手前に表示されてしまいます
最前面表示のウィンドウよりも手前に表示されるウィンドウ よりも手前に表示されるウィンドウってどうやったら作れますか? って話になってしまうので、そういう事はできなくなっている。
タイマーで監視して常にアクティブに・・・ っていう嫌らしいコードが頭に浮かんだぜ
>>129 TCHAR buffer[1024];
ZeroMemory( buffer, sizeof(buffer) );
を渡しても問題が発生しています
C++でCPU温度を取得したいんだけど、なんかいいAPIある?? XP borland c++ なんだが。。。誰か教えてくれ
>>133 FILE_NOTIFY_INFORMATIONの
FileNameがFileNameLengthの分だけ正しい内容になっていればOKだぞ。
0終端はなされないと書かれてあるしな。
TOPMOSTのウインドウをオーナーウインドウにしたらできる気もする>最前面より手前
>>135 有難うっ
>0終端はなされないと書かれてあるしな。
これは知らなかった。WideCharToMultiByteでANSI分の文字数取って変換ってやってた
何にせよ、おかげで解決しそうです。有難うございました。
VBのリストビュー使ってるんだが、SubItemが編集状態にできないので フォーカスが当たってる場所に擬似的にテキストボックスを表示させたい んだが、フォーカスが当たっている座標が分からん。何か良いAPIはないものか。
>>139 LVM_GETITEMRECT とかでいいんじゃねーの?
141 :
デフォルトの名無しさん :2009/06/19(金) 00:37:16
初歩的な質問かもしれませんがエディットボックスを作ってもキーボードで文字を打ち込むことができません。なぜでしょうか? マウスの右クリックから文字を貼り付けることはできます。
ここは大穴狙いで。 メッセージループでTranslateMessageしていない、とか?
>>142 すげー助かりましたw
分かってることなのになんでこんなの見落としてたんだろう・・・
上でも挙がってるReaDirectoryChangesWを使って見たんだが ファイルを複数移動すると取りこぼす時がある 何か改善案ないかな?
1個につき1回じゃないぞ
>>145 勿論承知してる
非同期のマルチスレッドで常に呼んでるけど
ファイルを多数移動すると通知されれず
結果取得の為の待機をしてしまう
このAPIは基本取りこぼしはしない?
>同期操作が正しく完了した場合、lpBuffer パラメータはフォーマット済みのバッファを表し、 >lpBytesReturned パラメータにはバッファに書き込まれたバイト数が返ります。 >転送バイト数が 0 の場合、バッファが小さ過ぎて、ディレクトリやサブツリーで発生した >すべての変更に関する詳細情報を格納できなかったことを表します。 >この場合、ディレクトリまたはサブツリーを列挙して、変更内容を計算する必要があります。
148 :
デフォルトの名無しさん :2009/06/19(金) 15:23:12
とあるサイトで勉強していて、マウスクリックしたところにSetPixelVで点を打ってみましょう、という課題をやってみたのですが まず 300*300の多次元配列を用意して int pixel[1000][1000]; WM_LBUTTONDOWNのメッセージで int w = LOWORD(lParam); int h = HIWORD(lParam); pixel[w][h] = 1; UpdateWindow(hWnd); return 0; WM_PAINTのメッセージで HDC hDC; PAINTSTRUCT ps; hDC = BeginPaint( hWnd, &ps ); for(int w=0; w<300; w++) { for(int h=0; h<300; h++) { if(pixel[w][h] == 1) { SetPixelV( hDC, w, h, RGB(255,0,0) ); } } } EndPaint( hWnd, &ps ); return 0; してみたのですが、windowサイズを変えるまで塗られません。 RedrawWindowも試してみましたが、WM_PAINTが発生しないようです。この方法は駄目でしょうか? それともwindow生成を自分でクラス化してるのですが、そのクラスに問題があるのでしょうか?
ちゃんとInvalidateしてる?
>>147 デバッガで追ったけど、バッファが足りないっていうのは無かった
関数呼んでWaitで変更通知来るまで待機してるんだが
まだ通知されてるだろうに、そこで待機状態に入る
151 :
148 :2009/06/19(金) 15:47:47
>>149 ありがとうございます。出来ました。
InvalidateRgn(hWnd, NULL, true);
UpdateWindow(hWnd);
152 :
148 :2009/06/19(金) 16:50:15
というか WM_LBUTTONDOWNのメッセージで int w = LOWORD(lParam); int h = HIWORD(lParam); pixel[w][h] = 1; InvalidateRect(hWnd, NULL, false); ↑ これだけでOKなんですね
下図のように自己交差しているリージョンを、 ┏━┓ ┃ ┃ ┗━╋━┓ ┃ ┃ ┗━┛ 交点で個別のリージョンに分けたいんですけど、 ┏━┓ ┃ ┃ ┗━┛┏━┓ ┃ ┃ ┗━┛ 簡便な方法ってないものでしょうか。 リージョンに関するWinAPIで対処可能でしょうか。 よろしくお願いします。
早く教えて下さいよぉ
153です。いちおうトリップつけときます。
この時間はやはりわかる人はいないんですね。。。
1日平均10レスのスレにそんな速く回答が帰ってくると思うなっての…。
GetRegionDataで地道に作り直すしかないんじゃないか
┏━┓ ┃ ┃ ┗━┛┏━┓ ┃ ┃ ┗━┛ の上記二つのリージョンを作ったら CombineRgnで混ぜればいいよ
>>162 リージョンの合成じゃなくて、分離する方法を聞いていると思われる。
>>163 あ、すまん勘違いしてた
リージョンから分離したいなら、GetRegionDataから作り直す
ビットマップとかから作るなら、CreateRectRgnとCombineRgn組み合わせればいいよ
リージョンというより、自己交差しているパスを交点で切り離せれば、 そこからリージョンを作ればいいような気がするな。 ま、APIでそういうことが出来るのかどうかは分からないが。
ただ光らせるために片目捨てるとかアホだろw
中盤グロかった・・・
誤爆はほっとけ
スレチを承知で聞かせて貰う グロイ?
義眼にLED仕込んだバカのビデオだよ
術前→設計→術後だから血とかはないな
>>172-173 サンクス。最初の画面で嫌悪感出て見るの辞めた
零見たいにサーモグラフィー埋め込めば良いのに
話がそれたが、回答としては出尽くしたのか? 他にアイデアがあれば書いといてあげて。
自演してんなよ
おれは175=165だけど?
れぎおん
無理。
皆さん回答ありがとうございます。 164さんのビットマップから作る方法を検討してみます。
181 :
デフォルトの名無しさん :2009/06/20(土) 13:46:04
IMEの制御について詳しい方いらっしゃいますか? 漢字仮名まじりの文をIMEを使って全部ひらがなに逆変換したいんですが、 漢字仮名まじりの文をIMEに設定する関数 ImmSetCompositionString(himc, SCS_SETSTR, str, length, NULL, 0)が MSIME2002では成功するのにATOK2006では失敗します。 一応MSIMEでは動くものが作れたんですが、ぶっちゃけクソ変換なので、できればATOKを活用したいのです。 何か別の方法がないでしょうか? ネットで調べても変換操作をしたあとの再変換の方法ならあるんですが、 漢字仮名まじりの文をIMEに設定して逆変換する方法で、ATOKで成功するものが見つけられないんです。
大抵の企業でATOKなんてわざわざ入れてないのでおk
世間一般の企業がどうとかは関係なくて、自分のところのデータ変換処理に必要なんです。 ATOKだと文脈を理解して適切な読み仮名に変換してくれるはずなので、それに期待してるのです。
「詳細なテキストサービスのサポートをプログラムのすべてに拡張する」がONならOFFにしてみるとか? これでうまくいっても、PGでの対応方法は知らないけど。
>>184 それはOFFになってましたね。
試しにONにしてみると、MSIMEでも逆変換できなくなってしまいました。。。
「詳細なテキストサービスをオフにする」のチェックも変えましたが、こちらは変化なしでした。
Immで始まるIME制御APIは自分が試した大部分でATOKとMSIMEの間で互換性がありました。
しかしIMEとは無関係のところからもってきた文を逆変換することに関してだけは互換性が無いようなのです。
ATOK12ではできたという話がネット上にありましたが、ATOK2006はその方法ではダメでした。
難しいですね。
コントロールの座標をクライアントから見たい座標で取得する方法でいいのないな? 今はコントロールとクライアントの二つをGetWindoxRectでスクリーン座標から強引に求めてるが どうも違う
187 :
デフォルトの名無しさん :2009/06/20(土) 16:43:25
>>186 MapWindowPoints関数を使え。
ウェブのMSDNって「戻り値」の説明だけごそーり消えてるんだけどなんなんだあれ? 直す気ないのかな?
関数とprintfとかとAPIはどっちが遅いの?
190 :
デフォルトの名無しさん :2009/06/20(土) 17:01:21
>>181 ImmGetConversionList でいけるはず
192 :
デフォルトの名無しさん :2009/06/20(土) 17:47:12
FF11 のいずれかを含むページは 10752 ページ中、 164 ページ見つかりました。
誤爆した
システムフックするソースとか見ると、DLL側で良く #pragma data_seg(".ShareForHook") HHOOK MouseHook = NULL; #pragma data_seg() を眼にするんだが、何でこれをする意味が良く分からない。 単純にHHOOK MouseHook = NULL;じゃ駄目なの?
#pragma data_segってのはプロセス間での共用メモリスペースを作るオプションでな その中で宣言された変数はどこのプロセスで変更しても全てのプロセスに伝わるわけだ 何で必要なのかはCallNextHookExの第一引数見れば分かる 2000以降は要らないんだっけかな
理由もちゃんと書いてあるだろ
>>197 ライブラリの関数は同じ実行ファイル内にリンクされるのでコストは自分と定義した関数と同じ
APIの場合は、IPCを通じてOS内部にある関数本体のアドレスに引数を渡して結果を受け取るためコスト増
ああこいつ馬鹿か
素直に頭が悪くて理解できないと言えよw
printfもOSのAPI内部で呼ぶっつーの馬鹿
自分で定義した関数で、想定されうるあらゆるデバイスに対して出力できる処理かいてるのか
>>199 有難う!
MSDNでのSetWindowsHookEx関数では
>グローバルフックは共有リソースであり
と書いてあった
正直まだ解せない部分もあるけど、システムフックの最低限必要のマナーなのね
207 :
199 :2009/06/20(土) 19:43:48
ああ、理解力なさそうだね
まぁ、そんなもんじゃね? あとは、実際の動作をエミュレートするかだな。
プログラム書いていていつも思うのは LeftとRightとかBeginとEndとか 長さが違うのが無性に腹立つんだが 欧米人には美的感覚ってものが無いのか?
外人さんのデモ見てると、プロポーショナルフォントだったりするしな・・・
214 :
190 :2009/06/21(日) 00:06:52
>>209 2006ではだめですか。ATOK2005は確か出来たはずなんですが… 残念です。
215 :
sage :2009/06/21(日) 01:02:46
自分は漢字の読み仮名の取得には IFELanguageを使ってるが。
DLして読めるWin32APIのドキュメントってどこにあるんですか? MSDNだとインターネット接続していないと読めないので
217 :
デフォルトの名無しさん :2009/06/21(日) 13:45:41
219 :
デフォルトの名無しさん :2009/06/21(日) 14:11:22
αRGBをunsigned longに入れた配列を画面に描画したいんですけど 一番高速な方法はどんなものでしょうか?
221 :
デフォルトの名無しさん :2009/06/21(日) 15:42:17
このスレ的にはAlphaBlendだろ? しかも
>>221 のリンク先計算式間違いすぎ
前に見たやり取り
WZC API(KB918997)だがリファレンスが見つからない どこにあるかご存知の方おられますか?
>>225 ありがとう、MSDNは見たはずなんだが抜かってたか・・・
ステータスバーをオーナードローしてるんだが プログラム起動時に、メインウィンドウとステータスバーのスタイルを弄ると WM_DRAWITEMの通知の際、CtrlTypeがODT_MENUになるんだが何故? 今まではswitchのdefaultでステータスバーを描画してたが 今はCtrlIDで分岐して描画してる。綺麗な方法じゃないけどね
SDKのリファレンスだと、CtrlTypeは未定義だと書かれているな。 CtrlIDで分岐するのはむしろ正解っぽい。
>>228 そうなのかっ
ODT_TABとか色々使ってるから、今更IDで判断なんて面倒すぎだぞ…
とりあえずステータスバーだけIDで判断する。有難うね。
dllの暗黙のリンクの場合関数が存在するかどうかはアプリ起動時にチェックされる? それとも関数を呼び出すところで初めてチェックされる?
静的リンクだよね?起動時じゃないか? Win2k以降のAPIを静的リンクしたEXEを98で実行したら速攻でエラー落ちした
やはりそうかthx 自分も書き込んだ後実験して起動時に落ちたわ
>>230 dllを遅延ロードにすると、初めて読んだところで例外が発生する。
>>231 静的リンクと呼びたくなるのは分かるが、それは静的リンクじゃなくて暗黙(的)リンクが正しい。
だからAPIが遅い
API"も"遅い
MSDN Express LibraryってExpressじゃないのとどう違うか分からんのだが 日本語の項目が少ないとかそういうのか?
一部省略されている情報があるようだ。仔細に調べたわけじゃないが、俺が気づいた範囲では、 .NETのSocketクラスが載ってなかったりした。
hDCBuffer = CreateCompatibleDC( hDC ); hBitmap = CreateCompatibleBitmap( hDC, 200, 200 ); SelectObject( hDCBuffer, hBitmap ); と for( int i = 0 ; i < 3 ; i++ ) { hDCBuffer[i] = CreateCompatibleDC( hDC ); hBitmap[i] = CreateComaptbileBitmap( hDC, 50, 50 ); SelectObject( hDCBuffer[i], hBitmap[i] ); } では、最初の奴の方がメモリは少なく済むんだよね?
メモリ1ギガもあれば誤差
GetDC()を行った後にReleaseDC()をしなければいけないのは 分かっているんですが GetDC()をnewした場合はReleaseDC()をした後に deleteをしなければならないのでしょうか? 教えてください。
お前は何を言っているんだ? とりあえず、"GetDB()をnewする" のソースコードを書いてみろ
GetDC()をnewするって言うのが何を指してるのかわからないが HDC *phdc = new HDC; *phdc = GetDC( ... ); ていうことならWin32 API以前にC++の問題。
GetDC ⇔ ReleaseDC の対は Win32APIの要求 new ⇔ delete の対は (多分)C++ の要求
245 :
241 :2009/06/22(月) 13:20:12
よく理解しないまま質問してしまってすみません。
HDC *phdc = new HDC;
*phdc = GetDC( ... );
の後に、
ReleaseDC(phdc);
delete phdc;
としなければならないか?
と言う事です。
>>244 さんの返答からして必要そうな感じはしていますが。。。
ReleaseDC( *phdc ); が正解な もっと基本的な部分から勉強しなおした方がいいと思う。 new/deleteはAPIの動作とまったく関係ない.し、newで確保したメモリがReleaseDCで解放されることはない。
247 :
241 :2009/06/22(月) 13:33:25
>>246 さん
ありがとうございました。
馬鹿ですみません。
248 :
109 :2009/06/22(月) 18:44:40
>>111 マイク入力を使わずにできますか?
調べましたが、そういう方法はわかりませんでした。
249 :
109 :2009/06/22(月) 19:26:28
どういうソフトを作りたいかというと、たとえば Windows上で任意のいろんなソフトが動いていて、それぞれのソフトが音を出したり出さなかったりするわけですけど、 それらすべての音をスピーカーに出力しながら音声認識して文字で表示するようなものを作りたいのです。 スピーカー出力をマイク入力に直結するようなやり方はしたくありません。
無理
実行状態のスレッドIDを取得できるWin32APIはありますか?
254 :
251 :2009/06/22(月) 20:42:31
自作の常駐ソフトを,管理者権限でOS起動時に実行することは可能でしょうか? 今はレジストリのRunに登録して自動実行していますが,これだと管理者権限で 起動できません.かといってrequireAdministratorを設定すればOS起動時にUAC が出てきてしまいます. OSはVista 32-bitを使用しています.
サービス化とかでぐぐれ
無理
タスクに登録
>>255 OS起動時ならサービスに、ログイン時ならタスクで
ポップアップメニューにポップアップメニューを追加したら 追加されたポップアップメニューを破棄すれば追加したのも一緒に破棄される?
ああでもログイン者がアドミン権限無いならタスクじゃ無理かな。 サービスが確実。
SetThreadPriorityをスレッド休止中に行ったらエラーになりますか?
263 :
255 :2009/06/23(火) 17:15:02
ありがとうございます. 1. 自作常駐ソフトをサービス化する 2. 他のサービスプログラムを作り,そのサービスから自作常駐ソフトを起動するようにする 現在管理者権限で起動したい常駐ソフトが2個ほどあるので,1の方法より汎用性が高い2 の方法を検討しているのですが,サービスから起動するプロセスは管理者権限を得られる のでしょうか?
ツールバーのボタンの文字列を得るにはどうすればいいんでしょうか
GetWindowText
>>263 || [最上位の特権で実行する] チェック ボックスをオンにすると、
|| タスク スケジューラは、最小限の特権 (UAC) トークンではなく
|| 管理者特権トークンを使用してタスクを実行します。
ってあるじゃん。わざわざ作るまでもなく、タスクスケジューラで OK
スクリーンキーボード(ゲームパッド型)+コマンドコントローラーみたいなアプリって難しい?
難しいかどうか判断が付かないレベルでは難しいね
269 :
デフォルトの名無しさん :2009/06/23(火) 21:16:15
ドライブがフォーマットされてるかどうかを調べる関数があれば教えてください
>>269 ファイルが読み書きできれば、フォーマットされてる。
もっと真摯に回答しろよ・
>>266 実行するユーザーが管理者権限無いと管理者にはならないよ、あたりまえだけど。
dumpbinでdllのシンボルが見れるっていうんで試したんですけど、どこにも関数名が出てこないです dll.cpp extern "C" __declspec(dllexport) int __stdcall sq(int x); int __stdcall sq(int x) {return x * x;}; コマンドプロンプトで dumpbin /SYMBOLS dll.lib
出力はこんな感じです どこにもsqがでてきません・・・ちなみにコンパイラはVC++2008EEです COFF SYMBOL TABLE 000 00937809 ABS notype Static | @comp.id 001 00000000 SECT2 notype External | __IMPORT_DESCRIPTOR_dll 002 C0000040 SECT2 notype Section | .idata$2 003 00000000 SECT3 notype Static | .idata$6 004 C0000040 UNDEF notype Section | .idata$4 005 C0000040 UNDEF notype Section | .idata$5 006 00000000 UNDEF notype External | __NULL_IMPORT_DESCRIPTOR 007 00000000 UNDEF notype External | dll_NULL_THUNK_DATA String Table Size = 0x4A bytes
COFF SYMBOL TABLE 000 00937809 ABS notype Static | @comp.id 001 00000000 SECT2 notype External | __NULL_IMPORT_DESCRIPTOR String Table Size = 0x1D bytes COFF SYMBOL TABLE 000 00937809 ABS notype Static | @comp.id 001 00000000 SECT2 notype External | dll_NULL_THUNK_DATA String Table Size = 0x19 bytes Summary B7 .debug$S 14 .idata$2 14 .idata$3 4 .idata$4 4 .idata$5 8 .idata$6
>>273 >dumpbin /EXPORTS dll.lib
_ 、 /. \ | /⌒ヽ ⊂二二二( ^ω^)二⊃ /| / ./ ( ヽノ| 《/ノ>ノ/ 三 レレ
const DWORD sessionId = WTSGetActiveConsoleSessionId(); HANDLE userToken = 0; if (WTSQueryUserToken(sessionId, &userToken)) { HANDLE userTokenDup = 0; if (DuplicateTokenEx(userToken, MAXIMUM_ALLOWED, 0, SecurityIdentification, TokenPrimary, &userTokenDup)) { LPVOID env = 0; DWORD creation = CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS; if (CreateEnvironmentBlock(&env, userTokenDup, FALSE)) { creation |= CREATE_UNICODE_ENVIRONMENT; } else { env = 0; } STARTUPINFO si = { sizeof(STARTUPINFO), 0, L"winsta0\\default" }; PROCESS_INFORMATION pi = { 0 }; retval = CreateProcessAsUser(userTokenDup, L"C:\\Windows\\System32\\notepad.exe", 0, 0, 0, FALSE, creation, env, 0, &si, &pi); CloseHandle(pi.hThread); CloseHandle(pi.hProcess); DestroyEnvironmentBlock(env); CloseHandle(userTokenDup); } CloseHandle(userToken); } 上記コードをサービスから実行しプロセス(notepad)を起動できましたが,管理者権限しませんでした.どうすれば管理者権限で起動させられるのでしょうか?
281 :
279 :2009/06/24(水) 02:01:16
MDIのフレームウィンドウのクライアント領域の中で マウスクリックを検出するにはどうすればいいんでしょうか
283 :
262 :2009/06/24(水) 10:34:54
誰か回答お願いします。
さっさと答えろやクズ共
試せばいいじゃん
286 :
デフォルトの名無しさん :2009/06/24(水) 11:14:28
OSのOEM番号?xxxxx-OEM-xxxxxxxx-xxxxxxって番号を取得するAPIを教えてください
RegQueryValueEx
>>282 サブクラス化してWM_LBUTTONUP
289 :
デフォルトの名無しさん :2009/06/24(水) 11:35:12
レジストリかよ APIねーのかよ 役にたたねー奴だなまったく
>>286 TCHAR sz[24];
HKEY hk;
if (SUCCEEDED(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion"), 0,
KEY_READ, &hk)))
{
DWORD cb = 24 * sizeof(TCHAR);
if (SUCCEEDED(RegQueryValueEx(hk, TEXT("ProductId"), NULL, NULL,
sz, &cb)))
{
MessageBox(NULL, sz, NULL, 0);
}
}
VC++とVB間のプロセス間通信について聞きたいんですが、ここであってますでしょうか? 自分なりに調べてみたんですが、いまいち詳しいことが載っているサイト、書籍が見つから なかったので、何かお勧めのサイト、書籍ご存じないでしょうか? 今のところ、VCで画像認識、VBでマイコンの操作できるものがあり、この2つを連携させたいと 思っています。自分は、画像認識を主にやっているので、VC側である程度汎用性をもたせて、 他のプログラムとも連携させたいと考えています。
>>291 SendMessageでWM_COPYDATAを飛ばすのが一番楽。
それ以上は、WindowsSDKの「Interprocess Communications」から
好きなのを選べとしか。
開発環境同士でIPCとかチャレンジャヴルね
HMENUって破棄されてもいいようにコピー出来る?
自分でコピー サブメニューもあるなら再帰で
NOTFYICONなどWindowsやIEのバージョンによって サイズが異なる構造体を扱う場合、 実行時に環境を調べて対応する構造体のサイズを メンバに代入しなきゃいけないですよね 結構面倒なんですが、楽な方法はないですか
動作する環境制限すりゃいいじゃん
CCSIZEOF_STRUCT使えよ
>>299 XP と Vista で構造体サイズが異なる場合、
XP用の構造体使って、XP のサイズで指定しておけば、
Vista であっても XP の仕様範囲内で動作するでしょ
>>299 何のために構造体に自分自身のサイズを代入するなんて、無駄なことしてると思ってるんだよ。
その手のAPIは、そのサイズを見てバージョンを判断してるんだ。
>>301 それは調べてる最中にみつけました
便利ですよね
>>302 >>303 いやそれはわかってます
まぁ要するに過去バージョンに対応するのが面倒だというだけです
現実的には
>>300 さんの言うとおり
XP以降対応とかにしてお茶を濁しておくのが楽なんですかね
ありがとうございました
? WINVERを望みの値にして、xxx.cbSize = sizeof xxx; で済む話では?
HANDLE hThread[3]; Data data = { ... }; hThread[0] = (HANDLE)::_beginthread(func1, 0, &data); hThread[1] = (HANDLE)::_beginthread(func2, 0, &data); hThread[2] = (HANDLE)::_beginthread(func3, 0, &data); ::WaitForMultipleObjects(3, hThread, TRUE, INFINITE); ::CloseHandle(hThread[0]); ::CloseHandle(hThread[1]); ::CloseHandle(hThread[2]); 7行目のコードの実行で hoge.exe の 0x7c94e4ff で初回の例外が発生しました: 0xC0000008: An invalid handle was specified というエラーが出ます。 どうすればいいのでしょうか?
戻り値がハンドルなのはEX版のみでは?
>>308 WinAPIの範疇だと思ったんですが、どのスレが適切だったのでしょうか?
>>309 非ex版はスレッドが終わるのが速すぎると有効なハンドルを返さないんですね。
ex版にしたらエラーでなくなりました。
ありがとうございました。
_beginthreadのどこがAPIなんだ
apiだろ
ランタイムのスレッド依存部の初期化とか そういう周辺の面倒を見たあと Win32API の CreateThread 呼んでるからな VCの ほぼ生APIと同じ機能の独自ライブラリ って認識だわ 他の開発環境(例えば VB とか)からは呼び出せないので 厳密にはAPIとは呼べない代物じゃない?
POSIXとかへも可搬性あってAPIよりも抽象レベルが上だからAPIという感じではないな
APIAPIうるせぇよ
OPIOPI
OPPAIならみんな幸せ
318 :
デフォルトの名無しさん :2009/06/26(金) 16:58:01
非同期ソケット通信でWSAAsyncSelectのFD_CONNECTの時にメッセージを受け取らずに 自分のスレッドで接続したかどうかを識別する方法を教えてください
>>318 WSAAsyncSelectのSeeAlsoに、
WSAEventSelectとかselectとか書いてあるんだけどなあ。
.NETとかあるんだし、もう無理しないほうが良いよ?
プロパティシートって閉じる時 貼付けたダイアログにWM_CLOSE通知しない? DESTROYは来るけどCLOSEが欲しい
SYSPROCはどこに書けばいいの?
CString str ; //atlです Readfile(hFile, str.GetBuffer(dwSize). .....) みたいな感じでテキストファイルを読み込もうとしたんですけど 化け化けになってしまいました こういうやり方では無理ですか?
文字コード合ってんのかよ
すみません VCで新規作成保存したテキストは UNICODEで保存されるものとばかり思ってました><
ShellExecuteをフック?して開いたファイルを知る方法ないですか? 自前で最近使ったファイルを実装したり 関連フォルダを自動で開いたりという ユーティリティが作れたら便利かなと思ったので。
Vista では Deprecate らしいが、IShellExecuteHook というそのものがあるな。
ありがとうございます。 そのままだったのか…
ヘ(^o^)ヘ 場所は決めてるの |∧ / / (^o^)/ 告白するなら /( ) (^o^) 三 / / > \ (\\ 三 (/o^) < \ 三 あの坂の上 ( / / く 上り切るまでだよ!
:::::::::::::::男 は こ {::::::{ :::::::::::::::坂 て の _ ,−v 、::::::、 ::::::::::::::::を し _/rァ  ̄ヽn ヽ::::::ヽ ::::::::::::::::よ な -こヽ__)ヽ へフ -‐':::::::::::} :::::::::::::::::: く /::::::://, 7′:::::::::::::::::::::/ ::::_n_ 遠 、:::::::::ー' //-‐ ば の よ オ :::`ニl lニ い ヽ::::://\ か ぼ う レ ::::`フ \:::::::::ヽ __ ノ:::ー':::::::::::::ヽ り り や は /'´|_|`ニ_::::::::::::::::::::::::::::::::::::::::::::::l だ は く :::::::ノ'r三7/::::::::::::::::::::::::::::::::::::::::::::::} か じ ::::::::`フ, 匸/l::::::::::::::::::::::::::::::::::::::::::::/ ら め :::::: ̄´::: ̄´:::::::::::::::::::::::::::::::::::::::/ な た
330 :
デフォルトの名無しさん :2009/06/28(日) 17:03:31
初めまして。一つ質問させてください。 今、ローカルのコンピュータ名を設定する為に 「SetComputerNameEx」を使用しようとしています。 準備として、以下の通り書いたのですが、見つからないと 言われてしまい、Windbase.hの中身を覗いてみたら 「SetComputerNameEx」の宣言がありませんでした。 #define _WIN32_WINNT 0x0500 #include <windows.h> これは、どこかでヘッダとライブラリのアップデート版を 入手する必要があるのでしょうか? 環境は、winXP+SP3・VC6.0+SP6です。 すみません、宜しくお願い致します。
ないならないで、GetProcAddress() すればいいじゃん。
>>330 > これは、どこかでヘッダとライブラリのアップデート版を
> 入手する必要があるのでしょうか?
当然。
というかそんなこと知らずに今時VC6使うってどうなのよ。
333 :
330 :2009/06/28(日) 17:22:13
確かにその通りです。本当にすみません。 どこからダウンロードするべきなのか 教えて貰えますでしょうか。 宜しくお願い致します。
君は大人しく最新のVSを買った方がいい。 時間も手間も金で買える。
わからないからって、そんなレスつけるとは…
336 :
330 :2009/06/28(日) 17:30:04
すみません、本当に無知な物で。。。 申し訳ないです。 と言う事は、基本的には有償となるのでしょうか?
プラットフォームSDKはダウンロードしてみた? 最新のコンパイラだってEEがあるんだから何でも試してみては
platform sdkでググルといいよ 只、VC6に使えるかは分からないけど 俺もVC6使ってたけど、今はVC++2008にしてる。勿論無料の
ググれば VC6 で使える Platform SDK ってのが見つかる。
ググる前にまずこのスレのテンプレを見るべきじゃないかな?
物じゃない、者だろ
レスを書き込んでいるのが生物とは限らないぜ。
SYSPROCはどこに書けばいいの?
↑のように、な。
GetSaveFilenameを使ってファイルを保存する際に、 ファイルの種類のところが今何をさしているか取得する方法って ありますでしょうか? 選択された情報を使ってファイルの保存内容を変更したいです。
↑のように、な。
リッチテキストボックスに画像を貼り付けることは可能ですか?
346自己解決 nFilterIndex使えばわかりました。 もっといろんな条件で探すように気をつけます
351 :
デフォルトの名無しさん :2009/06/29(月) 17:35:51
非同期ソケット通信でWSAAsyncSelectのFD_CONNECTの時にメッセージを受け取らずに 自分のスレッドで接続したかどうかを識別する方法を教えてください
イベントかブロッキングにしとけば?
353 :
330 :2009/06/29(月) 18:37:20
無事、PSDKを入れる事で対応できました。 調べて見たら、これを入れるのは当たり前の事だったみたいですね…。 本当に無知でした。ありがとうございました。 それでは。
なんでその程度も知らん初心者がVC6なんて使ってるんだ? オクかP2Pで入手したとしか思えん
どうやって入手したかなんてどうでもいいじゃん
倉庫の奥にあったVC6がジャンク値で売られていたのかもしれないし、 中古ソフト屋で手に入れたかもしれないだろ。
それ以前に、もうみんな著作権だのライセンスだのという話にうんざりしてるんだよ。 ソフトが盗まれて大変という気持ちより、欲深く意地汚いという印象しか受けない。
C++ win32apiでショートカットファイル(.lnk)のリンク先アドレスを取得したいと思います。 いろいろ調べてみましたが、見つけることはできませんでした。 ご存知の方が、いましたら教えていただけないでしょうか?
ショートカット IShellLinkでググルといいよ それと調べればすぐに引っかかる内容 検索があまいよ
>>357 どこのみなさんか知らないが、
そんな事言われてもドザ板ソフ板あたりのキチガイ割れ厨の戯言と同じ印象しか受けないよ。
>>360 反抗したいお年頃だという印象しか受けないよ。
362 :
358 :2009/06/29(月) 21:53:10
>>359 返信、ありがとうございます。
解決できそうです(^^
>>357 みたいな思考の奴は絶対プログラマじゃないね。
どうせ何も作れない糞餓鬼でしょ。
>>364 プログラミングを商売にしていないプログラマなんてわんさかいる。
楽しいことができればそれでいいって連中がな。
いや、むしろプログラミングを商売にできない(=能力が無い)プログラマでしょ
著作権云々なんて科学の本質でもなければプログラミングとも関係がない。 そんな議論に時間をつぶしている暇があったら一秒でもプログラミングなり研究なりやりたいわけなんだよ。 俺の仕事を他人の手柄にされるのは我慢ならないし、 割れ厨が金を払わないということはソフトやソフトを作った俺に敬意を払っていないということだから不愉快だから、 割れ厨の肩を持つわけではない。 ただ、著作権云々でゴネてる奴は金にしか興味がないプログラマの本当の敵なんじゃね?ってことだ。 それ以前に金儲けに興味があるならわざわざプログラマなんかになりたいと思うわけがないだろ。 プログラマを使う側にいる方がよっぽど儲かる。 金儲けに興味がある現役プログラマは、そうならざるを得なかった奴だけなんだよ。
科学の本質てw 久々に厨房臭がプンプンする文章を見た
>>368 要するにお前は、
> 金儲けに興味がある現役プログラマは、そうならざるを得なかった奴
↑これなんだろ。
>>367 がどんなプログラムを書いているのか興味がある。
一秒でもプログラミングなり研究なりやりたい奴が2chでキモイ長文書いてるのかw
とりあえず、科学の本質を追求したプログラムを見せて貰おうではないか。
>>367 > 俺の仕事を他人の手柄にされるのは我慢ならないし、
> 割れ厨が金を払わないということはソフトやソフトを作った俺に敬意を払っていないということだから不愉快
それはプログラミング好きには共通ですね。
著作権やらライセンスの話になると殺気立つ人がいるのはどうもこの辺りが心配だからでしょうねぇ。
お前ら「文章の意図をくむ」ってことを国語の時間に習わなかったのか?
べつに著作権やライセンスの話になってないし、殺気立ってる人も居ないじゃん? 幻覚が見える人は大変ですね。
>>374 「産む機械だ」発言みたいに言葉面だけをとらえて大騒ぎしちゃうDQNと同じだよなw
>>374 電波文の意図を汲むことまでは習わなかったもんでね・・・
糞餓鬼が必死に背伸びして書いた支離滅裂な文章からどんな意図をくむんだよw
必死だな
必死で書いた長文を馬鹿にされてよほど悔しいんだな
VS6のWAREZでプツンときちゃう奴がいるとはなぁ 俺は金払ったのに金払わないで同じソフト使ってる奴がいるのは許せないって?w これだからガキはw
>>384 そんな奴いないよ?
まだ幻覚が見えてるの?
自分と社会が対等で、何もかも平等でなくちゃ許せないんだよね、こういうガキは。 そのうち成長すれば学習するだろうよ。
幻覚というか、単なる自意識過剰でしょ パトカーのサイレンが聞こえるだけでビクビクしてるようなものか
言葉面に反応するのが2ちゃんだろがw
>>389 書き込み一文だけからは何が言いたいかわからないことが多い。
だからいろいろ遠回りに探りを入れて反応を見てみるということをするわけだ。
それがコミュニケーション能力と違うかな。
>>390 お前は半年ロムってろ
2chを何も知らん厨房が
もうだめだこのスレ
とりあえず、スレ違い
>>366 >>384 言ってもいないことを決めつける場合って、自分が置かれている状況をそのまま相手に重ねて考える場合が多い気がするね。
人は自分が置かれている状況に一番興味を持っているわけだから。
買って堂々と使うか、割れて黙ってるかの、どちらかで頼む
というか
>>354 の要らん邪推が原因なのになんでこんなに引っ張ってるんだ
図星だから
400 :
デフォルトの名無しさん :2009/06/30(火) 10:13:34
非同期ソケット通信でWSAAsyncSelectのFD_CONNECTの時にメッセージを受け取らずに 自分のスレッドで接続したかどうかを識別する方法を教えてください
selectで書き込み可能か調べてみたら?
402 :
デフォルトの名無しさん :2009/06/30(火) 10:44:31
selectで調べてみたのですが、connect後にサーバーがacceptしたかどうかの判定ができませんでしたが どうやってselectで判定したらいいですか?
2週間同じ質問してるけどさあ そろそろ答えられる奴がいないんだと悟ろうぜ
HTTP/1.1 200 OK ACK とか数文字送るのにいちいち関数呼ぶやつって…
406 :
デフォルトの名無しさん :2009/06/30(火) 13:00:02
>>403 WSAAsyncSelectでFD_CONNECTをしとくとクライアントはacceptを認識してるから
何か知るすべがあるとおもったのですが・・・
フォームにメッセージを送らずにスレッド内で認識するにはやっぱ2を使わないとダメなんですかねこれ
>>405 C言語ってそんなくだらないこと気にしないと速度維持できないんですね
うんこ言語ですね
他は気にしてもしなくても維持できてない言語だらけ
#define DLL_EXPORT extern "C" __declspec(dllexport) DLL_EXPORT CALLBACK BOOL dllFunc( ); と定義して、GetProcAddressを用いてdllFuncを取得していますが VC++2008だと、ビルドエラーが発生します CALLBACKを外すと、問題なくビルドが行えますが それだとGetProcAddressでは取得に失敗します この場合、VC++2008ではdefファイルを使わないと行けないでしょうか? bccでは問題なくビルド出来、GetProcAddressでも取得出来ています
411 :
デフォルトの名無しさん :2009/06/30(火) 14:07:52
VCってうんこだからねえ
>>410 CALLBACK の場所がまずくね?
DLL_EXPORT BOOL CALLBACK dllFunc( );
>>412 有難うございます
CALLBACKの場所を仰る通りに変えてみたらビルドに成功しました!
只…出来上がったDLLからGetProcAddressしても取得に失敗し
LoadLibraryからDLLを読込んでもDllMainでのアタッチが来ません
VCからDLL作る場合何か必要な作法ってあるんでしょうか?
もしかして必ずdefが必要とか?
極力一つのIDEでアプリを完成させたいのですが、このままだとDLLだけBCC版になりそうです
普通は、def定義したほうが面倒がなくて楽だけどな それ以外だとマングルされた気がする。
>>409 camlでは関数はただのjmpでしかないからな。
Cの関数はいろいろpushしたりpopしたりeaxにmovしたりするから手間がかかる。
exe, dll, defと配置するのがちょっと嫌なんです defで関数名見られたりとか…まあ、dllからdef取られちゃいますけど
>>416 普通はexeの中にも関数名とかは残ったままだぞ。
そういう余計なデバッグ情報を消せるツールは存在するが。
リリースビルドすりゃexeに関数名は残らないと思うんだが・・・
defを置いても、やはりVC版のDLLをGetProcAddressから取れないです… 原因が不明… それとアタッチされない問題ですが DllMainではなくDllEntryPointと定義してた為アタッチされませんでした DllMainに直したところアタッチはされています。しかし、どちらでもビルド出来るのが不思議です
>>418 VCのリリースビルドでも関数名は残るぞ。
試しにVCでリリースビルドしたexeをollydbgとかで見てみろよ。
Exeの中の関数名ってことなら、設定次第だと思うのだが
>>420 普通の関数名と間違ってたわ、すまん
API呼んだ時は残るんだな
>>416 >exe, dll, defと配置するのがちょっと嫌なんです
defファイルの役割をなんか勘違いしてないか
dllの作成時に必要なものであって、実行時には要らないよ
黙れっ!
とりあえず、Dependency Walkerでちゃんとエクスポートされているか確認するんだ。
>>405 その手のライブラリは
ソケットから文字列読み書きするだけじゃなくて
エラー処理とかしてくれるだろ。
>>423 >defファイルの役割をなんか勘違いしてないか
>dllの作成時に必要なものであって、実行時には要らないよ
有難うございます。
以前フックするアプリを落としたらdefが同梱されて居たため
実行時にも必要だと思っておりました
必要ないのですね;
>>425 有難うございます。確認してみます
もし、エクスポートされて居ない場合うまい対処法はありますか?
BCCでは問題ありませんが、VC++2008の場合defを用いても現状GetProcAddressに失敗します
ビルドもちゃんとできねーやつは死ねよ
お前がしねよゴミ
>>427 dll内のシンボル名を抜き出せよ
bccで出来るならデフォルトの命名規則が違うだけだ
頭とか末尾になにかつくくらいだろ
何で上からなんだよ
Dependency Walker使えばそれもわかるべ。 まず使ってから質問しなおせ
お前ごときに言われたくねー
何度も申し訳ないです。dllの中身をdefで抜き出したところ エクスポートはされていました 只、命名規則が違っていました EXPORTS dllFunc1 = _dllFunc1@0 dllFunc2 = _dllFunc2@0 bccでビルドしたのでは@1、@2と綺麗に並んでますが、今回の正直?です
SYSPROCはどこに書けばいいの?
>>434 @の後が引数のバイト数になったりする
@0 なら (void) で引数なし
@4 ならポインタとか int とかを一つだけ
@の後ろって順序数じゃなかった? @0が並んでたら、GetProcAddress( hins, (LPCSTR)0 )で取れなくない?
>>437 それは関係ない
export されてない関数の命名規則なんて決まってない
いい加減Dependency Walker使えよ
わざとやってるとしか思えない
コンソールみたいに int型やdouble型の値を表示するのって いちいち型を変換して TextOutで出力するしかないのでしょうか?
コンソールだっていちいち変換してるだろう printfがやってくれてるなら、TextOutの前にsprintf呼んでそれ渡せばいいだけ
どうしてwsprintfは浮動小数点を変換できないのだろうか
仕様
どうしてそのような仕様にしたのだろうか、っていう質問なんだけど
wsprintfはAPI、なるべく軽くしたい、ランタイムのsprintfに任せたほうがようという設計思想だと思う
それ以上はMS「に聞くしか
まあ16bitの1.0のときからあるしなあ
その昔16bit時代に一々CRT版のsprintfなんかリンクしたらメモリ足んねーよって頃に作られたものだからとしか。
CRTを抜いて小さいWindows実行ファイル作成すると浮動小数点演算が使えない みたいな記述を見たことあるけど、それと関係ある? そもそもWindowsのカーネルとかその周りのものは一切浮動小数点処理しないって考えでいいのかな
CRT無しでも問題なく浮動小数点演算は使える とあるコンパイラがランタイムで定義される_fltusedや_ftol2_sseなどに依存するコードをはくだけの話
452 :
デフォルトの名無しさん :2009/07/01(水) 12:56:36
double d = 1.23; wsprintf(sz, "%d.%d", (int)d, (int)(d * 100) % 100); MessageBox(NULL, sz, NULL, 0);
453 :
450 :2009/07/01(水) 12:59:29
_stprintf_s
IEのオートコンプリート履歴を削除するプログラムを書きたいと思います。 win32apiで実現可能でしょうか?
可能
>>456 PStoreCreateInstanceで可能かも
460 :
456 :2009/07/01(水) 18:39:37
>>458 ありがとうございます。試してみます(><
462 :
デフォルトの名無しさん :2009/07/01(水) 19:36:12
お礼してくれ厨かよw
栗原いいぞ あとは一発あれば文句ないぞ4番
誤爆ですごめんなさい
APIとprintfみたいなライブラリと 自分で作った関数ではどれが速い?
>>450 MSKBにはFPUとかハードウェアが無くてもカーネルが全部エミュレートするから何も心配するなと書いている
煮詰まってどうしようもなくなってきたので、質問させて下さい。 低レベルキーボードフックを使おうと、 _tWinMain(){ /* ウィンドウの初期化とか */ /* DirectXの初期化とか */ ::SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, ::GetModuleHandle(NULL), 0); /* メインループ */ } という感じにしたら、なぜか、 ウィンドウが非アクティブの時にしか、コールバック関数が呼ばれません。 DirectXサンプルのSimpleSampleは、ちゃんと、 ウィンドウがアクティブ時でもコールバック関数が呼ばれてるから、 なんかくだらないヘマしてるだけだとは思うんですが、 他に何か気をつけないといけないことってありましたっけ? 環境:WinXP + VS2003 or VS2008
全てをフックする場合、DLL化しないと駄目だよ
>>469 アフォ
>>468 WH_KEYBOARD_LL のコールバックは特殊でSetWindowsHookExを呼び出したスレッドのメッセージループで発生する。
もちろんメインスレッドとは別スレッドでSetWindowsHookExは使えるけど、その場合そのスレッドでメッセージループを回す必要がある。
もしDirectXの描画をメインスレッドぶん回しでやっていれば、メッセージループが実行されない状態となりコールバックが呼ばれない状態に陥ることがある。
つーか、詳しくリファレンスに載っているだろ?
471 :
468 :2009/07/02(木) 02:05:59
>>469 >>470 早速の回答、ありがとうございます。
SetWindowsHookExの呼び出しと、メッセージループを同じスレッドに、
というのは、気をつけていたし、ちゃんとしていたつもりです。
(ていうか、全部メインスレッドでやってるはずです。
>DirectXの描画をメインスレッドぶん回しでやっていれば、メッセージループが実行されない状態
でも、これは気がつきませんでした。
たしかに、DirectXは関係ない普通のWinAPIでやったらちゃんといけました。
ttp://msdn.microsoft.com/ja-jp/library/bb219746 (VS.85).aspx
これを見て、あまり深く考えずやってしまってました。
でも、DirectXの処理のループを別スレで回しても変わらなかった……。
むう、DXUTは、なんでちゃんといけてるんでしょ。
改めて、調べてきます(⊃Д⊂)
double d = 1.01; wsprintf(sz, "%d.%02d", (int)d, (int)(d * 100 + 0.5) % 100); MessageBox(NULL, sz, NULL, 0);
double d = -1.99;
なかなか大変だね
DrawStateでアイコンを描画する際、選択された時に若干青くなるアイコンを描画出来ますか?
自前でアルファブレンドするしかないよ
>>475 有難うございます
ListViewに貼り付けたりすれば勝手にやってくれますが
今回の場合は自前でやるしかないんですね
479 :
468 :2009/07/02(木) 23:39:18
低レベルキーボードフックの件ですが、 とりあえずの原因が発覚したので報告まで。 DirectInputのキーボードオブジェクトの、 Acquire()が何かしらの邪魔をしていたようです。 これをコメントアウトして処理を止めたら、 低レベルキーボードフック関数が、ちゃんと呼ばれるようになりました。 ただ、なんでAcquireしたらダメなのかの理由まではまだわかっていません。 DirectInputも低レベル処理をしてるからなんでしょうか? DirectInputとの併用って無理なんですかね? そもそもGetKeyboardState使えってこと? とりあえず、フルスクリーン時に窓キー無効化とかしたかっただけなので、 フルスクになる時だけDirectInputの協調レベルを変更して逃げてるところです。
>>479 DirectInput使ってるなら、Windowsキーの無効化はDirectInputで出来るよ。
ポップアップメニューを開いたとき、メニューを選ばないで別の場所のクリックしたときにある処理をしたいのですが どのメッセージを見ればいいんですか?
DirectInputでキーボード探るなと
double d = 1.99; wsprintf(sz, "%d.%02d", (int)d, abs(d * 100 + 0.5) % 100); MessageBox(NULL, sz, NULL, 0);
しつけー
リージョンを複数作って、それぞれを指定した位置で改めてマージしたんだけど どのようにすればいいでしょうか? 今は htemp = CreateRectRgn( 100, 100, 0, 0, ); CombineRgn( htemp, htemp, hsrc, RGN_COPY ); とやってるんですが、RGN_COPYはx,y座標もコピーするんでしょうか?
recvfromで第3引数の受信バイト数を実際に溜まってるデータ数より 小さい値にすると受信したデータ数じゃなくてSOCKET_ERRORが返ってきます。 これちゃんと受信したバイト数って返してくれないんですか? 受信バッファにはちゃんと受信した分のデータは入ってるのですが
>>487 ああありがとうございます・・
これエラーと区別つかないなあ
まあFD_READイベントの時にやってるからデータはあるはずなんだけど
絶対エラーじゃないって断言できないからなあ・・
489 :
デフォルトの名無しさん :2009/07/03(金) 14:59:32
文字列"123\r\n456\r\n789\r\n" とあったときにこれを\r\nで区切って char buff[3][8]; buff[0]="123\r\n" buff[1]="456\r\n" buff[2]="789\r\n" という具合にカッコよくコピーするAPIとかを教えてくださいな
>>489 そりゃAPIじゃなく自分で書いた方が早いのでは・・・
>>483 今更だけど、VarBstrFromR8でいいじゃない。
492 :
デフォルトの名無しさん :2009/07/03(金) 15:09:44
>>490 とりあえず区切り文字で分割するみたいなのってないですかね?
phpのsplitみたいなのとか
strtokとか? しかしこれ非常に嫌われる関数
環境ごとの文字列操作ライブラリでも利用すべきだと思うわ
495 :
デフォルトの名無しさん :2009/07/03(金) 15:16:13
>>493 それ使おうと思ってやってみたけど使いづらいからやめた
先頭にいきなり区切りがあると次いっちゃったりするしそれ
>>495 区切りがあったら次に行くのはあたりまえでしょ。
自分で書きなさいな。
>>492 Win32APIにはそういうのないから、自分の使っているプログラミング言語のスレッドで何かないか聞いた方がいいと思う。
498 :
デフォルトの名無しさん :2009/07/03(金) 15:37:48
>>496 全然わかってないのね。
区切りを発見したら区切りまでを返すでしょ。
先頭にある場合はNULLを返すのが普通。
strtokはNULLで終わるから使えないつってるの。
自分で見るならこんなの使う意味ないでしょ
>>497 自分の知る限りでは無かったからひょっとしたらあるかもしれないとおもって
わかってないのはお前 でもまあこんな質問するくらいだからしょうがないか
>>498 いや、先頭に区切りがあったら、区切りをNULに書き換えて、先頭へのポインタを返すべきだろ…
NULLと'\0'を使いわけられないやつはバカ。
前時代の言語は大変だなあ
NULは文字 NULLはポインタ
505 :
デフォルトの名無しさん :2009/07/03(金) 15:45:13
>>500 君はもうちょっと勉強したほうがいいよ
分からないことは恥じじゃないよ、わからないくせに知ったかするのが恥かしいことなんだから
506 :
503 :2009/07/03(金) 15:47:06
妙な知識に固まっちゃうのもアレだがねえ
SYSPROCはどこに書けばいいの?
>>501 そうじゃなかったのか
道理でバグが出たわけだ
>>505 ひょっとしたらあるかもしれないと思って人に聞いてる程度で何言ってんだ
はいはい終了終了
ツリービューを使ってるんだが 例えばWindowsXP付属のレジストリエディタなんかのツリーは 各ノードが開いたら開いたままで使いにくいと思う。 そこでスタイルにTVS_SINGLEEXPANDを指定してるんだが +-を押すとんなもん関係ないとばかりに開いたままです。 これを統一する方法ないかな?
むむ RegexOptions^ Option = gcnew RegexOptions(); Option |= RegexOptions::CultureInvariant; これでコンパイルエラーerror C2676が出てしまいました・・。
ここはAPIスレでよお
ULONG pixels[w][h]; // 色情報2次元配列 pixels[x][y]をx,y座標のピクセルの色として、配列全体を描画したいんですが、ループでSetPixelを回したら激遅でした 配列をそのままBitMapかなにかのように扱って画面に描画してくれるAPIはありませんか?
DIBSection作って工夫すれ
>>516 こういうのを探してました
サンクスです
タブコントロールみたいに、選択されている状態によって表示される内容(ボタンやチェックボックスなど)が異なるダイアログを作りたいです。 タブコントロールだとダメなのは、一部のコントロールを共用したいからです。 ダイアログの半分ぐらいはどのタブが選択されていても不変な内容で、残りだけタブごとに変えたいということです。 こういう場合、どのようなプログラムを組んだらいいでしょうか。 なお、別にタブにこだわっているわけではなく、例えばプルダウンボックスで選択されたものによって表示内容が変わるものでもOKです。 よろしくお願いします。
DIBすると描くのが遅い罠
/> /rイ </'| | <\ | | __ ピタ ゴラ スイッ チ♪ ト、\ | | || f| | ||\.>|_l ||─┘ミ | || rー─────‐|L__on  ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
なんでヘクタールやねん
>>518 共用したいものをタブコントロールの外に置け
頭が固いよなあ
524 :
518 :2009/07/05(日) 11:28:18
すいません。 518でタブコントロールと書いていたのは、プロパティシートのことでした… リソースエディタで書いたダイアログをウィンドウ内で切り替えながら表示したかったんです。 で、色々調べたらタブコントロールにダイアログを関連づけるサンプルが見つかったので、解決してしまいました。 お騒がせして申し訳ないです。
ALTキーが押されたら、Winキーが押されたことにするプログラムを作りたくて、 --- DLL ------ SetWindowsHookEx(WH_KEYBOARD_LL, &LowLevelKeyboardProc, hInstance, 0); ... LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode == HC_ACTION) { KBDLLHOOKSTRUCT* kbd = reinterpret_cast<KBDLLHOOKSTRUCT*>(lParam); if (kbd->vkCode == VK_LMENU) { kbd->vkCode = VK_LWIN; } } return CallNextHookEx(hhk, nCode, wParam, lParam); } のようにしたのですが、まったく変換されません。 どうすれば目的の処理を達成できるのでしょうか?
左右区別やめたら
スタートメニューの表示を意図してるなら Winキーは特殊だからそれだと無理かも
WH_MOUSEHOOK_LLならキーコードに0代入で握り潰しは可能
完璧に動作を実現したいならレジストリでマップ書き換えが一番
>>528 できるだろ。Xkeymacs とかやってるし。
532 :
528 :2009/07/05(日) 18:54:01
>>525 みたいに書き換えるんじゃなくて、SendInputとか使うんじゃないかと思ったお
あ。そだな。握りつぶして SendInput/keydb_event だな。
400x400、24bitのビットマップを読込んで それを複数のDIBにコピーした場合に使用されるメモリは ビットマップサイズとほぼ同じサイズですか?
お前次第
//INVERSEはビットの左右を反転する処理 c = INVERSE(a); d = INVERSE(b); e = c + d; f = INVERSE(e); このようにaとbからfを求める処理があるとき INVERSEを無くしたり減らしたりはできるでしょうか
APIと何の関係が?
1バイトならテーブルが楽じゃね? 2バイト以上はソフトウェアでそのまま加算してしまっても速度変わらんかもな。 つーか、宿題レベルだなw
すべてのサービスはログオンする前に実行されると思っていましたが、 自作のサービスがログオン後になってから実行されてしまうため、 ログオン時に来るメッセージSERVICE_CONTROL_SESSIONCHANGE を捕まえることができず困っています。 どうすればユーザがログオンする以前、できればログオン画面から サービスを実行させることが出来るのでしょうか? 現在のサービスはSERVICE_AUTO_STARTで自動実行するように しています。
>>540 サービスがアクティブになったとき、すでに有効なセッションを列挙して
ステータス調べて特別あつかいするとかじゃだめなの?
システムアカウントでもそうなる?
すべてのサービスはログオンする前に実行されると思っていました まずこの時点で間違ってるから
A 「ご老公様がこのような所に来られるはずがない」 B 「ご老公様の名を騙る不届き者だ」 C 「ご老公でも構わぬ」 D 「ご老公様、お手向かい致しますぞ」 E 「ご老公様、お命頂戴致します」 F 「ここで死ねばただのちりめん問屋」 G 「悪党らしく死に花を咲かせてくれるわ」 H 「飛んで火に入る夏の虫」 I 「我ら幕臣あってのご老公様ではないか」 J 「先の副将軍もこれで終わりぞ」 K 「もはやこれまで」 L 「笑止千万」 M その他
「この紋所が目に入らなぬか」 「構わん、やっちまえ!」
546 :
デフォルトの名無しさん :2009/07/07(火) 17:48:39
なぬかって言われてもな
ココノカの森の魔女 ナノカ
質問です
拡張子aviの動画ファイルを再生するために
『Win32API(C言語)編 第48章 動画を再生する』
http://www.geocities.jp/ky_webid/win32c/048.html をほぼ模写する形でプログラムを組みました。
大抵のaviのコーディックは再生できることを確認したのですが
今回、再生したいデジカメなどで使用されるMotion JPEGについては
再生することができませんでした。
そこで、どなたかWin32APIとC++(Visual Studio)を用いてmotion jpegを再生するプログラムを
教えていただけないでしょうか?
よろしくお願いします。
>>549 すみません。質問が悪かったです。
Motion JPEGも含めすべてのAVIファイルはもうコーディックを入れていてWindows Media Playerなどで再生できます。
というより、他の拡張子はコーディックを入れることでWMPでもWIN32APIでも再生できるようになったのに対して
Motion JPEGはもともとWMPで再生可能だったのに、WIN32APIのプログラムからでは再生できません。
(VFWのコーディックにMotion JPEGは含まれています)
おそらくですが、『Win32API(C言語)編 第48章 動画を再生する』の
// AVIファイルをオープン
#ifdef USE_MCI_SEND_STRING
mciSendString( _T("open test.avi type avivideo alias test"), NULL, 0, NULL );
のmciSendStringでMotion JPEGが読み込めていないようなのです。
mciSendString以外を使ってMotion JPEGを読む込むか、mciSendStringになんとかMotion JPEGのライブラリを関連付けて
読み込めるようにするプログラムを作りたいのですが、上手くいきません。
モーションJPEGを拡張子変換するという手法はありますが、それはこちらの都合でNGとされてしまったので上記の方法
またはそれ以外でも良いので、Win32APIとC++(Visual Studio)を用いてmotion jpegを再生する方法をご教授ください。
DirectShowでおk
mixerGetDevCapsで所得したMIXERCAPSのszPnameは32byteしか確保して なくてデバイス名をフルネームで所得する事が出来ないみたいなんですが 他にフルネームで所得出来る方法があるんでしょうか?
一定時間後にシグナル状態になるイベントって作れないのでしょうか? HANDLE a = CreateEvent(...) WaitForSingleObject(a); // 一定時間経過後aがシグナル状態になり通過
どういたしまして
与えられたルートパスが、CD(DVD)ドライブなどのメディアドライブで、 そのドライブにメディアが存在するかを取得する方法を教えていただけないでしょうか? GetDriveType()でドライブの種別はわかりますが、実際にメディアが挿入されているか を識別することができません。
GetFileAttributesで取れるが、ブランクメディアとかの識別は分からない
子ウィンドウの描画なんですがDIBSection作って 子ウィンドウのウィンドウプロシージャのWM_PAINTの中で BeginPaintした時のHDCでbitbltすると 子ウィンドウ作成時の最初描画されないのですがこれは普通ですか? もちろんサイズ変えたりすれば描画されます BeginPaintのHDCを使わずに ウィンドウ作成時に取得したHDCを代わりに使うと問題ないです
すみません
>>559 は勘違いでした
しかしDIBsectionって作った直後にすぐBitblitしたら駄目なんでしょうか?
中身が設定されているなら別にかまわないよ。 子ウィンドウの CreateWindowして、ShowWindowしたあと、 全画面をInvalidateRectして、UpdateRectしてみるといいよ。 後、背景がNULLになってるかどうかも確認した方がいいよ。
ウィンドウズ再起動の際、ENDSESSION送られてくるけど ENDSESSIONを処理しきる前にウィンドウズが終了する場合ってあるよね? たまにENDSESSIONの時にファイル保存しようとすると、真っ白なファイルが出来る
>>561 あ、dibsection直後というよりはCreateWindow直後と言った方がよかったかもしれません
何かウィンドウが作られる前にbitbltしてる感じがしました
言われたこととか加えて色々ちょっと作り直してみます
999 名前: ユキノシタ(青森県)[] 投稿日:2009/07/08(水) 22:19:03.34 ID:qqOQqhHw 1000なら嘘
アクティブ(前面にない)WindowにたいしてPostMessageを使って メッセージを送る事は出来ますか? グローバルhookでdllがある特定のキーを所得した時に 最小化(通知トレイに格納)されているアプリにメッセージを 送りたいのですがアクティブでないと遅れないので困ってます なにか方法があればよろしくです
ハンドル取得できてんなら、ちゃんと届いている。 期待した通りに動かないのは別の問題だろ。
SendMessage
ハンドルを確認したところ hWndのアドレスを最初にDLL側でコピーして保存してあるんですが 最小化した時だけNULLになってたみたいです アクティブに戻すと元のアドレスに戻るんですが謎です・・・
それはプロセスごとにアドレス空間が独立しているからでは?
そのアドレス空間ってよくわからないんだけどいったい何者なの?
プロセス内から見えるメモリ空間全体、つまりアドレス00000000〜FFFFFFFF全体のこと 例えば同じアドレス12345678でも、プロセスAのアドレス12345678とプロセスBのアドレス12345678は内容が異なる これは、プロセスごとにOSがアドレス空間全体を切り替えているから このため、異なるプロセス内のデータを触ることは(通常は)できない
つまり名前空間のようなもんですね プロセスってのはスレッドとかDLLのことですか?
単に毎回ウィンドウ検索するだけで済むような話じゃないの
API以前だわ。
うんこしてきてもいいですか?
がまんしろ
そんな・・・も、漏れる・・・
なれると気持ちいいよ
゙'. ,ト `i、 `i、 .、″ | .,.:/"" ゙‐,. ` / ` .,-''ヽ"` ヽ,,,、 ! 、,、‐'゙l‐、 .丿 : ':、 、/ヽヽ‐ヽ、;,,,,,,,,,-.ッ:''` .,"-、 ,r"ツぃ丶 `````` ../ `i、 ,.イ:、ヽ/ー`-、-ヽヽヽ、−´ .l゙`-、 _,,l゙-:ヽ,;、、 、、丶 ゙i、,,、 ,<_ l_ヽ冫`'`-、;,,,、、、、.............,,,,、.-`": │ `i、 、、::|、、、ヽ,、、. ```: : : ``` 、.、'` .|丶、 .l","ヽ、,"、,"'、ぃ、、,、、、、.、、、.、、、_、.,,.ヽ´ l゙ ゙).._ ,、':゙l:、、`:ヽ、`:、 : `"```¬――'''"`゙^` : ..、丶 .l゙ `ヽ ,i´.、ヽ".、".、"'ヽヽ;,:、........、 、、...,,,、−‘` 、‐ |゙゙:‐, ,.-l,i´.、".`ヽ,,,.".` `゙゙'"`'-ー"``"``r-ー`'": _.‐′ 丿 ,! j".、'ヽ,".、".、"`''`ー、._、、、 、._,、..-‐:'''′ .、,:" 丿 ゙l,"`"`''ヽヽ"`"` ```゙'''"ヽ∠、、、、ぃ-`''''": ` 、._./` ._/` `'i`ヽヽヽ`''ーi、、、: : 、.,-‐'` 、/` ``ヽン'`"` : `~``―ヽ::,,,,,,,,,,.....................,,,,.ー'``^ ,、‐'"` `"'゙―-、,,,,..、、 : ..,、ー'"'` : `‘"`―---------‐ヽ``"''''''""
なんというクソスレ
583 :
デフォルトの名無しさん :2009/07/09(木) 23:45:33
win32APIで、チェックボックスとかのコントロールの背景を 変更する方法を教えて下さいorz
オーナードロー
結局どれで組むといいんですか VC持ってるけど
Wiiで組むのはさぞ難しかろう
Windows Vistaにて、Win32APIで 指定のexeを既定のブラウザに設定する方法はありませんでしょうか?
どのようなシーンを想定しているかといいますと、
Firefox Portableにてオプションの「既定のブラウザ」にする設定だとfirefox本体が設定されてしまい、
Firefox Portableが起動していない場合、新規プロファイルで立ち上がってしまいます。
それを回避するために、proxy?となるexeファイル(FirefoxPortable.exe )がありまして、それを既定のブラウザに設定したいのです。
似たようなことを実現するソフトに、下記のソフトがあるのですが、こちらはAPIが違うせいか、Vistaに対応していません
[DefaultBrowser] Set the default browser for your user profile
http://windowsxp.mvps.org/defaultbrowser.htm
プロパティシート見たいにタブでダイアログ内容を切り替えるってどうやるの? 何処かで画面に貼り付けてタブの切替の際に非表示にしてるってあったけど やり方が良く分からない
589 :
デフォルトの名無しさん :2009/07/10(金) 14:34:42
定義済みクラスなんかの中にスクロールバー配置した場合に スクロールのメッセージ取得するにはサブクラス化とかしてメッセージ捕まえないと駄目ですか? 他に方法ありますか?
591 :
デフォルトの名無しさん :2009/07/10(金) 18:44:59
CreateWindowExで作ったツールバーにTB_ADDSTRINGで文字列を加えてるんだけど この文字をボタンの中央に表示する方法あったら教えてください。
592 :
デフォルトの名無しさん :2009/07/10(金) 19:02:33
593 :
デフォルトの名無しさん :2009/07/10(金) 19:03:36
>>591 "\x03hogehoge" だったかな
594 :
591 :2009/07/10(金) 19:25:41
>>593 それってTB_ADDSTRINGで指定する文字列って事ですよね?
試しにそれをコピペして実験しましたがダメでした。
もしかして文字の先頭に制御コードの何かが入るのでしょうか?
595 :
デフォルトの名無しさん :2009/07/10(金) 19:39:07
lngStyle = GetWindowLong(hwnd, GWL_STYLE) lngStyle = SetWindowLong(hwnd, GWL_STYLE, (lngStyle && ~BS_LEFT) || BS_CENTER)
598 :
594 :2009/07/10(金) 19:51:51
>>595 ツールバー自体が表示されなくなりました。
無論hwndは適切な値に書き換えましたが...
論理演算しちゃらめぇ〜!
600 :
デフォルトの名無しさん :2009/07/10(金) 20:14:45
lngStyle = GetWindowLong(hwnd, GWL_STYLE) lngStyle = SetWindowLong(hwnd, GWL_STYLE, (lngStyle && ~WS_LEFT) || WS_CENTER)
論理演算(ry
lngStyle = GetWindowLong(hwnd, GWL_STYLE) lngStyle = SetWindowLong(hwnd, GWL_STYLE, (lngStyle & ~BS_LEFT) | BS_CENTER) lngStyle = GetWindowLong(hwnd, GWL_STYLE) lngStyle = SetWindowLong(hwnd, GWL_STYLE, (lngStyle & ~WS_LEFT) | WS_CENTER)
603 :
デフォルトの名無しさん :2009/07/11(土) 14:03:13
現在、.NETアプリケーションでWebBrowserコントロールにおいて フォルダのExplorer表示を出しています。そうすると必ずあの青色の 「タスクメニュー」が現れてきます。 通常のエクスプロ−ラだとそれをフォルダツリーに置き換えたり、 検索ツールに置き換えたりできました。 自分のアプリケーション上で、あのタスクメニューを消してしまうことは できるでしょうか?できるようであればその方法を教えてほしく。 ちなみに、エクスプローラのオプションで「全般」タブ→「作業」のところ で、「従来のWindowsフォルダを使う」を選ぶとタスクメニューはでなくは なるのですが、そうすると、Xpでは「写真」表示ビューが使えなくなって しまうので、「フォルダに共通の作業を表示する」の方で使いたいので した。このオプションの状態で、プログラムから「タスクメニュー」を消す 方法がありましたら教えてください。 よろしくお願いします!
最近はビット演算ってマイナーなのかな ビットフラグとか複数のフラグを1つの変数に格納できて便利なのに
スレチだからな
ビットフラグは使うよ。複数の値を一発で判定できて便利だし。 if (flag3==1 && flag2==0 && flag1==0 && flag0==1) {...} とかより if ((flag & 0x0F) == 0x09) {..} のほうがわかりやすいじゃない。 …いや、もしかしてビット演算に不慣れだとわかりにくいのか??
どっちにしても数字直接は使わんなあ
漏れは、 if ((flag & 0x0F) == 0x09) {..} とかより if (flag3 && !flag2 && !flag && flag0) {...} のほうがわかりやすい
609 :
606 :2009/07/11(土) 17:14:44
少なくとも8ビット以下の組み合わせは、16進数リテラルのほうが把握しやすいんだよ俺は! まあ、異論は認めるw
分かりやすかろうが分かりづらかろうがコード中にマジックナンバーを書く奴は死刑
611 :
デフォルトの名無しさん :2009/07/11(土) 20:27:26
なんでビットフィールド使わんの?
スレチだろうが
ビットフィールドはどういう配置になるか想定できないのでAPIで使うのは好ましくないなぁ。 それを言ったら構造体も規格上はどう配置するか決まってるわけじゃないけど、 そこらへんは妥協ということで。
bit fields 使うと結局 bit 演算がしにくくなるという罠
グループボックス内にファイルドロップを受け付けるEDITを置いても グループボックスのせいで、上手くDropを受け入れてくれないんだが スマートな解決策無いかな? 今はグループボックスをサブクラス化して、グループボックスにD&D来たら EDITに転送するようにしてるんだが、綺麗じゃない
616 :
デフォルトの名無しさん :2009/07/12(日) 12:35:13
エディットコントロール内のカーソルの現在位置が何文字目か検出することはできますか?
617 :
デフォルトの名無しさん :2009/07/12(日) 12:38:59
>>615 グループボックスとEDITの順番を入れ替えたら?
618 :
デフォルトの名無しさん :2009/07/12(日) 12:42:19
>>617 マジ有難う!
てっきり後から置いた方が前面に来ると思ってたけど
先に置かないと駄目なのか
ウィンドウのクラス化について書いてある参考書でお勧めのものってありますか?
サービスに文字列を渡すことはできますか? ControlServiceでは文字列ではなくてID(整数)しか渡せません
>>621 名前付きパイプ・メールスロット・ソケットやCOMのようなプロセス間通信でやり取りするしかないはず。
623 :
616 :2009/07/12(日) 17:50:23
上手くいかない・・・ SendMessage( hWnd_edit, EM_GETSEL, 0, pos ); としたらposに現在カーソル位置までのバイト数が返って来るんじゃないんですか?
>>623 その3行の書き込みをするよりも、ヘルプでEM_GETSELを調べる方が速いだろう。
VisualStudioなら、そこにカーソル合わせてF1押すだけなんだし。
それでも何が悪いのか分からないのなら、C言語の基礎の問題。
っていうか、EM_GETSELでググれば腐るほどサンプルコード出てくるだろう。
GetMessageってどうやってHWNDを識別してるんですか?
>>622 ありがとうございます
そうなんですね
ちょっと不便です..
>>622 よく知らないけど Atom は渡せないの?
そんなきもい物渡さないでください
GetMessageってどうやってメッセージの送信先を特定してるんですか? 引数にもHINSTANCEもHWNDも入ってないですよね?
スレッド毎にキューイングされてるメッセージってどっかに書いてなかったか
t
user32の中の人が頑張っている
SDKで開発してるんですが、メモリリークしてるか分かるAPIって無いでしょうか? リークしないようコードは組み、リーク確認用として、mallocやnewを置き換えるコードを用意しましたが STLを使っているために、確保した数と解放した数があいません STLを使わないと問題なく確保/解放数はあうのですが
スマポイつかえばいいんじゃない?
>>633 #include <cstdlib>
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#define new ::new( _NORMAL_BLOCK, __FILE__, __LINE__ )
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
WPARAMとLPARAMのWとLって何の略なの?
Word, Long
Win16でサイズが異なっていた名残。
user32の中の人ってCPUのことだろ
違います
DOS窓のrouteコマンドをAPIなどを使ってプログラムでやりたいのですが それをやるAPIを教えてください
CreateProcess
>>643-644 すみません。
言い方が悪かったです。
route printとか情報取得はできるのですが
route add等の設定する方のAPIを知りたかったですです
CreateProcess
もういいです。レスしないで下さい。ウザいだけです。
応用が利かないバカには何言っても無駄 APIが知りたいと書いてるが、そのものズバリのコードじゃないとわからんらしい。
知らないならレスしないで下さい。ウザいだけです。
acanfで複数受け取るにはどうするの?
応用が利かないバカには何言っても無駄 acanfと書いてるが、そのものズバリのコードじゃないとわからんらしい。
ツマンネ('A`)
scanfで複数受け取るにはどうするの? 数字を
応用が利かないバカには何言っても無駄 %1と書いてるが、そのものズバリのコードじゃないとわからんらしい。
ツマンネ('A`)
| \ __ / _ (m) _ピコーン |ミ| / `´ \ ('A`) ノヽノヽ くく
Win9x系のSetTimerは終わってるって本当? 9x系でも動くようコード組んでるんだけど、自分でスレッド作って そこからタイマーイベント発行の方がいいかな?
Win9x系そのものが終わってる。
それをいっちゃあお終いよ
耳年増が増えたなあ
質問です。 zlibライブラリを使う場合、CreateThreadを使って生成した スレッドで使うとメモリリーク起こすのでしょうか? 少しスレ違いになっているかもしれませんが宜しく御願いします。
>>659 そんな気を遣うくらいだったらNTでもタイマーは使っていられないと思う。
そう心配することはないのでは?
終わっているなんて聞いたことがないから適当に答えているけど。
>>664 有難う。環境が無いから確認出来ないんだよね
配布予定のソフトだけど、確認せずリリースしてみる
>>659 終わってるじゃ何を聞きたいのか分からんよ。
WM_TIMERの優先度が低いのはWin9xに限ったことではないし、
どっちかっていうとtimeSetEventのコールバックの方が悲惨。
>>663 zlib内でCの標準ライブラリを使うならリークは起こる
>C のランタイムライブラリに記録されている関数を使うスレッドは、CreateThread 関数と ExitThread 関数ではなく、
>C のランタイム関数である beginthread 関数と endthread 関数を使うべきです。この方法に従わないと、
>ExitThread 関数を呼び出したときにわずかなメモリリークが発生します。
>>103-107 も参照のこと
669 :
668 :2009/07/13(月) 23:02:18
正確にはリークが起こる可能性がある、かな 使用するCランタイムの関数にもよるし、zlibやCランタイムの リンクの方法にもよるので
670 :
663 :2009/07/13(月) 23:08:19
CreateTimerQueueTimerでおk
>>671 わざわざ高分解能タイマを長周期で使うような奴はいないから、
なかなか表面化しなかったんだろうなあ。
リアルタイムOSじゃないんだからタイマーに精度を求める方が間違っている
#define STRICT を定義すると型チェックが厳密になるらしいが、これって本当? borlandのフリーコンパイラで型による警告が大量に出ても VCだとスルーするんだけど
本当
ウェイタブルタイマ使おうぜ
うちの会社、データの入力にIE+フォームを使っているのだけど、めっさ使いづらいのよ。 別にデータを持っておいて、そこからなんとかIEのフォームに流し込む手はないっすかねぇ。 普通のコントロール(テキストボックスとか)なら、ウィンドウハンドル取ればなんでもできるけど、 フォームじゃそうはいかないっすからねぇ。 今のところ、キー操作系のWinAPIを使ったキーボードマクロっぽい方法しかないかなと 考えているのですが、他にスマートな方法があれば是非。
断る
ブラクラ注意
>>680 とっかかりをありがとうございます。
なるほど、ウィンドウハンドルからIHTMLDocument2を取得して…という感じか。
>>678 httpでFormデータを直接POSTしたらだめなんか?
IEで入力ってwebになってるってことなの 誰が作ったんだろ まとめてアップとかできないなんて
>>678 DBに直接アクセスさせてもらえないの?
>>684 俺もまれにみる糞システムだと思う。コストの削減もあるんだろうけど。
>>685 ちと絶望的かも。セキュリティに関しては無駄に、そして異常に厳しい。
>>683 その発想は無(ry
最終手段としてそれもありですね。ただぶっつけ本番なのが怖いですが。
みなさんレスありがとうございます。
enterキーを押しても警告音が鳴らないようにできますか?
唐突過ぎる
689 :
デフォルトの名無しさん :2009/07/15(水) 13:36:35
そりゃ出来るか出来ないかといわれれば出来るだろう
一番簡単なのは電源を切っておくことだな
しょんな・・・ 1つの場面の中でエンターキーの機能はそのままで音だけ鳴らないようにしたいんです
どんな場面だよ まず今、警告音が鳴ってる状況を説明してくれよ。
ああ説明が足りなかった エディットボックスの中の文字を書いた後にエンター押させたいんだけどポンッって鳴る
単に複数行入力にすればいいと思うよ
改行とか受け付けちゃったりしない?
改行したいんじゃないの?
enterが改行じゃないケースは少なからず存在する
ES_WANTRETURN かな
>>693 KeyPressの中でKeyがVK_RETURNならKey = NULL;しとけ
ボリュームをミュートにしてもいいと思うんだ
釣れますか
702 :
デフォルトの名無しさん :2009/07/16(木) 15:02:50
リソースエディタで作ったダイアログ(Langurgeが英語)を日本語環境で表示させる方法を教えてください。
What is your problem?
FindResourceEx LoadResource LockResource CreateDialogIndirect(Param)
705 :
702 :2009/07/16(木) 15:22:27
>>704 ありがとうございます。
アプリのロケールを変えたら、英語のリソース読んでくれるとか、そんな簡単にできないんですね。
その目的でSetThreadLocaleは使うなと書いてある
WSAWaitForMultipleEvents(1, &hEvent, FALSE, WSA_INFINITE, FALSE); WSAEnumNetworkEvents(Socket, hEvent, &EventFlags); てやったときに、どちらの関数も 0 を返していて、成功はしているだけど EventFlags.lNetworkEvents が 0 のときがある。これはなんなの?? 何もイベントが発生していないのにWSAEnumNetworkEventsから制御が戻ってきたって事?
キー入力に関して。前回の呼び出しから、今回の呼び出しの間に特定のキーが1度でも押されたかどうかを調べるAPIってありますか?
GetAsyncKeyStateというやつですね。thx GetAsyncKeyboardStateが無いのは不便ですね
one night
ExitWindowsでWindowsを終了する場合 一応メモリ解放とかした方がいいのかな? ログオフの時はするけど、終了や再起動ならリークもしても関係無いと思うんだが
関係なくてもするのが礼儀というものです 礼儀など気にしないなら、別にどうでも
Windowsを終了する場合は解放しない、なんてコードをわざわざ書くのだろうか。誰得
カーネルオブジェクトの呼称について質問なんですが、 Memory Mapped FileのことをSectionと呼ぶ場合には、どういった意図が込められているのでしょうか あるいは殊更に分けて考える必要はないのでしょうか
>>712 CのmallocとちがってWindowsのresourceは終了時に解放されないものがある
あとはわかるね
717 :
712 :2009/07/17(金) 13:55:09
有難うございます 後から追加した機能なので、解放処理をWM_CLOSEや他に混ぜている事もあり 面倒なので、いいかなっと思っていました アプリが終了してからExitWindowsを呼ぶ為には良い方法は無いでしょうか?
>>717 そんだけの用途なら、なんかのフラグ立てといて、メッセージループ抜けたらExitWindows呼べば?
>>718 有難うございます
atexitで設定するか、仰る通りにフラグ経ててループ抜けたら呼ぶようにしてみます
通 素材の味を楽しむ 自然本来の味 う 塩でその店のレベルがわかる は 塩最高 塩以外は邪道 な 素材のうまみを生かす 素材 塩 「塩で」 ぎ の香 甘ったるいタレで焼き鳥が食えるか の タレ厨は味覚障害者 塩もこだわった塩がいい 白.. 異 高い店で食ったことないんだろ? 臭い肉をごまかすためのタレ 焼 . .論 ポテチはうす塩が至高 タレは子供用 AVの見過ぎ き は 素 素 / ̄ ̄ ̄\ 認 タレはタレの味しかしない 材 最終的にたどり着くのは塩 材 .../.\ /. \ め の の / <●> <●> \ 本 な 焼き鳥=塩 魅 . 「タレ」から「塩」に 味 | (__人__) | 当 い 力 普通は塩 \ `ー'´ / の 高い店なら塩、安い店ならタレ が シンプルに塩 .. / \ 味 際 甘味にも通ずるものがある 覚 たれ(笑) 食の原点に戻る 立 自分用の塩を携帯してない奴は馬鹿 子供の頃はタレだったが今は塩 つ 塩こそ最高の調味料!!
strcmpi使うとワーニングが出るんだけど_strcmpiつかえってことでしょうか? 少し調べたんですけど両者の違いがよくわからなくて・・ わかる方いたら教えて頂けませんか?
yahooの知恵袋っていつから珍回答で質問者をからかう場所になってんだ
>>721 ISO/ANSI標準規格では、下線部で始まる名前を処理系の独自拡張用に使って良いとしている。
VC++にとっては、strcmpiはなんの標準でもない名前なので、
下線を付けて独自拡張用の名前に適合するようにするのがふさわしいとVC++の制作陣は考えたということ。
ここまで書いたけど、スレ違いだから次はよそで聞け。
WindowsFormsのControl.Tagのような機能をSDKで実現するにはどうしたら良いのでしょうか。 具体的に言うと、各コントロールにそれぞれ整数を記憶させておきたいです。 現在は、STLのmapを使って、ハンドルとデータを関連付けています。
たぶんこの3つある。 Set/GetWindowLongPtrでDWLP_USER Set/GetWindowLongPtrで任意の正整数によるインデックス指定(使用量をWNDCLASS(EX)で指定) SetProp/GetPropで文字列またはアトムによるキー指定
727 :
724 :2009/07/18(土) 00:40:32
おぉ、可能なのですね。回答ありがとうございました。 自分に最適な方法を吟味して使ってみようと思います。
単色塗りつぶしはどの方法がオヌヌメ? FillRect?PatBlt?それともExtTextOut?
>>726 自己レス。GWLP_USERだった、すまん。
>>728 自分はExtTextOutが多いなあ。
MFCやWTLだとFillSolidRectという名前でラップされているから、躊躇無く使える。
MFCもWTLも使っていないなら、自前で定義するといいと思う。
どなたか
>>715 について知っている方はいませんでしょうか
Win9xで動くソースをベースに改良を加えたら 9x系で実行すると現在のWindowsのバージョンでは起動出来ない とエラーが発生するんだが、こうなる原因って何かな? API周りはきちんと動的リンクにしてる 文字列は全てリソースに纏めてしまったが、もしかしてリソースに纏めると9x系って駄目?
>>731 VisualStudio2008でビルドすると駄目
MSDNのライブラリにもあるし、一般的な慣習ならここの方が早いかなと思って質問しました とりあえず質問に対するお答えを待つことにします
>>732 有難うございます
borlandでビルドした所きちんと起動しました
VC++2008ではWin9x系に対応出来ないんでしょうか?
>>736 2008はNT4以前、9x系はランタイムでバージョンチェックしてる。
2005にするしか無いかなあ。
>>737 有難うございます
2008では無理ですか…
別のIDEでビルドするようにしてみます。有難うございました。
まぁ、動くようには出来るがお薦めはしない。 因みにVC2005でも95だけアウトだった気がする。
>>739 VS2005でWin95はググれば対処法が出てくる。
ファイルパスを扱うコードを書いてたのですが NTFSで最大のパス長って32768文字ってことになってますが Vista64bit環境でエクスプローラでフォルダを作ってみると どうもMAX_PATH制限がかかっているようで250文字付近から 新しいフォルダを作れなくなります Win32APIでもパス先頭に \\?\付けてUnicode版なら32768文字までと MSDNに出ていますが OS標準のエクスプローラで未だMAX_PATH制限があるのは互換性のため? 自分で作るときもMAX_PATH制限のあるAPIで気にせず使えばいいのでしょうか?
>>742 .NETだと「\\?\」を付ける形式は殆ど通らないしなあ。
(大抵ArgumentExceptionで蹴られる。)
MS的にはMAX_PATHの範囲内でやりくりしろ、って方針に見える。
つまりは、MAX_PATH制限は半ば公式って事でOKなんじゃないかな。
744 :
デフォルトの名無しさん :2009/07/18(土) 18:29:38
windowsにkill()ってないの?
>>744 windowsにってことならtaskkillのことになるのか?
恒例のMAX_PATH論争スタートぉぉぉぉぉ!!!
>>744 何をやりたいかによる。例えば、文字通り殺したいならTerminateProcessだけど。
748 :
デフォルトの名無しさん :2009/07/18(土) 18:59:41
>>745 それはコマンドっぽい
>>747 signalハンドラで捕まるもの全て
受け取ったものをそのまま子プロセスに流したい
それは難しいな。Windowsにはシグナルなんて概念ないから。 ANSI/ISO Cになぜかsignal/raiseが収録されているせいで、C/C++ではsingal関数が使えるけれど、 Windowsではlibc層でエミュレーション的に実装されている。 そのため、大抵は外から直接シグナルを送る手段なんて存在しない。 CygwinやSFU/SUAなどといったUnix互換環境ならそっちのkill使えよと言うところ。
750 :
デフォルトの名無しさん :2009/07/18(土) 19:18:05
そんならコンソールプログラムの終了とかは一体どうやって実現されてるの・・・ もしかしてTerminalProcess呼ばれたことも知らないまま死亡?
>>750 コンソールでのCtrl+C入力をWindows APIで取得するにはSetConsoleCtrlHandler。
初期状態のハンドラはExitProcessを呼び出す。
(しかし、C/C++ならSIGINT用にlibcがハンドラを登録しているはず)
こんな調子で、ほかのものもだいたいは別の手段となる。
コンソールならSetConsoleCtrlHandlerとかかな ウィンドウアプリならWaitForSingleObjectでオブジェクトがシグナル状態か非シグナル状態かを確認できる スレッドが終了すればスレッドのハンドルがシグナル状態になるし、CreateEventとかで自分で好きにイベントを作って SetEventやResetEventでシグナル状態を変えれるよ…たぶん
>>752 いや、GUIアプリで、SetConsoleCtrlHandlerに対比させる何かといえばWM_CLOSEだと思う。
>>743 やっぱエクスプローラでもサポートしてないとこからも
そうなんでしょうね
有り難うございました
a1からh8なら縦横の位置を出して qが入ると終了する。どうするの?
は?
別のスレでも見たな
b3を引いてxでOKじゃね?
いや、s13を左シフトして∀でおk
何言ってんだ、気合だ、気合だろ。
761 :
デフォルトの名無しさん :2009/07/19(日) 07:44:23
ウィンドウにフォーカスがない状態でもキー入力が取得できるように ウィンドウプロシージャ内でGetAsyncKeyStateを使ってみましたがうまくいきません。 コンソールだとフォーカス外でも取得できるのですがどのようにしたらいいでしょうか? 環境はXPとBCCです
762 :
デフォルトの名無しさん :2009/07/19(日) 11:11:04
763 :
721 :2009/07/19(日) 11:27:16
>>723 ありがとうございます!!
確かにスレ違いでしたので次は気をつけます
>>762 やはりグローバルフックを使うしかありませんか。サンクス
API関数が失敗した際にC++例外を投げたとして、内部的にRaiseException等のAPI関数が呼ばれて GetLastError()の値が更新されることはあり得るんでしょうか 例外をキャッチする箇所でGetLastErrorを呼ぶという設計に問題があるのかもしれませんが...
GetLastErrorはAPI呼び出し直後に呼ぶものだろ。 自分の都合で勝手にAPIの動作が、自分流になることを期待するなんて、どんだけゆとりなんだよ!
767 :
765 :2009/07/19(日) 17:47:38
そんなに変ですか? 失敗したときにSetLastErrorでエラーコード設定しておいて、例外で抜けるようにしておけば、 呼び出し元のコードで失敗を処理するか、放置するか選択できて、 特に、失敗頻度が低いであろうコードで見通しのよいコードになると思ったのですが...
内部的にRaiseException等のAPI関数が呼ばれて GetLastError()の値が更新される
SetWindowRgn 関数でリージョン設定すると XPのビジュアルスタイルがクラシックみないになってしまうのって 回避できないんでしょうか?
SetWindowAttributesLayeredEx
771 :
765 :2009/07/19(日) 18:12:46
ありがとうございます やはりそういうことがあるというなら、回避策を検討します
もっと使いやすくて同じぐらい低レベルなAPIはないんですか?
>>767 自分は例外クラスにGetLastErrorのコードを渡すようにしている。
__declspec(noreturn)
void ThrowWin32Exception()
{
throw Win32Exception(GetLastError());
}
774 :
769 :2009/07/19(日) 18:59:49
>770 ありがとうございます。 調べてきました。 SetLayeredWindowAttributes UpdateLayeredWindow ですね。 これ使わないと実現不可ですかね? 可能であればSetWindowRgnが良いのですが。
SetWindowRgn is obsoleted.
776 :
769 :2009/07/19(日) 19:54:51
>775 了解。
777 :
デフォルトの名無しさん :2009/07/20(月) 01:53:07
タスクトレイのツールチップで変数を表示したいのですが wsprintf(str, "%d", hensu); CopyMemory(ic.szTip, str, 5); 上のようにして変数が変わっても初期値(0)のまま表示されます ホバーするたびに値が更新されるにはどうすればいいですか?
>>777 NIM_MODIFYでShell_NotifyIconを呼び出さないと駄目。
というか、その二行で本当に反映されると思っていたのなら、
APIの一般的な設計を理解していない気がする。
>>778 できました。本当にトンクス。精進します
ウィンドウハンドルって中身はウィンドウオブジェクトの識別子でしたっけ? LATにウィンドウオブジェクトの識別子があって、LATのインデックス、とかでしたっけ?
781 :
デフォルトの名無しさん :2009/07/20(月) 10:28:03
unlockerのようにファイルを使用しているプログラムを列挙するにはどうしたらいいんでしょうか?
ハンドルはただの実体へのポインタ メモリアドレスなんでプロセス内でしか意味を成さない
>>782 突っ込みどころ満載だが、平気で嘘つくの良くない!
カーネルオブジェクトは別だろ?
ウィンドウハンドルって他プロセスと共有できんの? 別に同期オブジェクトだの共有メモリマップハンドルだのは別腹ですだよ
共有できなかったら、どうやって WM_COPYDATA を送るんだよ。
>>786 プロセスBのウィンドウを操作するためのハンドルをプロセスAで取得する
このときプロセスAで取得したハンドルとプロセスBで元々使っていたハンドルは
同じウィンドウを指していても共有されてるわけではない
あー、はいはい。共有はされてません。同じのが使えるけど。
sorehatamatama
>>786 みてFindWindowが返すHWNDの中身が激しく気になってきた
791 :
780 :2009/07/20(月) 15:52:51
俺のあやふやな知識によれば
>>787 が正しかったと思う
HWNDを別プロセスへ何らかの手段で持っていっても、使えない。
WM_COPYDATAの場合だけは、そのメッセージの場合に限りシステムがHWNDを輸送するための特別な処理をしていたと思う。
HWNDの中身はメモリポインタではなく単純な整数(1とか2)になってて
プロセスごとに1つあるシステム的なオブジェクトを管理するテーブルのインデックスだったと思う。
そのインデックスで参照した先にあるのがメモリポインタだったかウィンドウオブジェクトの識別子だったかは覚えてない。
前段と後段で矛盾してるわけだが。
>>791 いや、HWNDの値はシステムで一意だが。
ん?Spy++で確認できるウィンドウハンドルがSpy++のプロセス内でしか 有効ではない、と言ってる人がいる?まさかね。
>>792 貴方の感じてる違和感を具体的に言語化出来ますか?
>>793 ソースはありますか?
ハンドル系は全てプロセス内でしか使えなかったはずです。
さまざまな関数やWM_COPYDATAなどでHWNDが使えるのは内部的に処理しているからだったと思いますが、
WM_COPYDATA でデータをプロセスまたぎで渡せるのは、確かに Windows がうまいことやってくれるから。 HWND はシステムグローバル。Advanced Windows 辺り書いてあんだろ?
Spy++で見たHWNDをベタ打ちで使っても正常に使えているんだが
グローバルハンドルとローカルハンドルがあったと思うよ。 使えるのもあるし、ダメなのもあったかなと。
Windowsが全部のHWND管理してるとは思えんなぁ、プロセス・スレッドで持ってるはずだし APIで列挙とかするたびにWindowsがプロセス毎に聞いて回ってるとかなら
事実上 HWND=メモリポインタ になったのはWindowsの長い歴史から見ると比較的最近なんだよな
もうだめだこのスレ
頑張っているのは一人だけだろ 他ウィンドウや、その子ウィンドウにメッセージを送り込むようなコードを 何回となく書いてきたけど、ダメな物なんて一回もなかった。 デバッグ時にspyでHWNDの値を確認するなんてざら。 もちろんこっちのプログラムと同値。断言してもいい。
たしかHWNDとHGLOBALがシステムでグローバル、 カーネルオブジェクトのハンドルはローカルだがDuplicateHandleで他プロセスに持って行ける、 それ以外(タイマとかGDIオブジェクトとか)はプロセスローカルだったと記憶しているんだが。。。
>頑張っているのは一人だけだろ そういう思い込みをしてしまう人は2ch使わない方が良いと思うぞ
>>804 信じられないような馬鹿は複数いるということだな、つまり。
>>803 たぶんそれで合ってる
プロセスローカルなハンドルでも子プロセスに限ってプロセス作成時のパラメータで継承させられるとかもあったような
>>805 たかが知識の間違い程度で信じられないような馬鹿扱いをする幼稚な人も2ch使わない方が良いな
795だけじゃなかったのか。 ウィンドウハンドルをシステムグローバルじゃないって頑張ってるのは。 世の中は広いな。
俺一人が頑張ってるとかやめてください いやマジで
実際有効かどうかなんてどうでもいいだろ。 全てのハンドルがグローバルであることを期待するようなプログラムは Windows の仕様に反してるってだけだ。
すべてのハンドル != すべてのウィンドウハンドル、だからな。
プロセスが終了しても自動的に解放されないハンドルってどんなものがありますか? できれば完全な一覧でもあると助かるのですが
MSですら把握してないのに?
というか何で自動で開放されるしくみにしなかったんだろう
textoutで書いた文字ってdllinjectionを仕組まないと取得できませんか?
dllinjectionは必要ないが何らかの手段でコードinjectionは必要
コードinjectionを用いなくても仮想マシンでモニタリングしてもよい
>>812-814 16ビットや9xの当時ならいざ知らず、今時プロセス終了で解放されないハンドルってあるの?
非メインスレッドが終了されないでトップレベルウィンドウ破棄後にもプロセスが残ってるぐらいならあった
OSグローバルで共用できるリソースは解放されないんじゃなかったかな
単に他のprocesssが実体を参照しているだけっていう、間抜けなオチとか。
ミューテックスなんかのカーネルオブジェクトは参照カウントで、 プロセス終了時にカウント減らされるでしょ。
>>818 というか、コード注入の手法の一つがDLL注入。
他のプロセスで任意のコードを実行させたい(コードを注入したい)とき、
目的のコードを全部WriteProcessMemory()で書き込んだり、EXEを書き換えたって
かまわないんだけど、それだと色々面倒なので、ほとんどの場合は目的のコードを
DLLにしておいて、相手のプロセスにロードさせる(DLLを注入する)わけ。
そういう意味では、必ずしもDLLを注入しなくても「何らかの手段で」コードを注入すれば
目的は達せられる。現実的にはほぼDLL注入一択だけどな。
826 :
818 :2009/07/21(火) 22:03:35
>>825 ご丁寧にありがとうございます。
textoutのメッセージをフックするdllを注入するのが
一般的ってことですね。
(最初に、質問したとおりなんですが。)
ありがとうございました。
>>826 ちょっと違う。俺も初心者の頃混乱した覚えがあるけどな。
SetWindowsHookEx()自体にAPIフックの機能はない。関数名にHookと入っているし、
APIフックのサンプルコードにはよく使われているから、誤解しがちだけど。
SetWindowsHookEx()は、他のプロセスにDLLをロードさせるためだけに使われるので
あって、メッセージフックはただのダミー。
「TextOutのメッセージ」なんてものは存在しない(あれば楽だけど)。
APIフックは別途行う必要がある。
SetWindowsHookExにDLLをロードさせる機能はないと思うの。 チェーンに登録されるだけな気がするの。
アホは黙ってろ
SetWindowsHookEx()でグローバルフックを掛けると、各プロセス空間にフック関数を
配置するために、フック関数を含むDLLがロードされる。
このとき、フック関数だけでなくDLL全体がロードされるので、結果、多くのプロセスに
任意のDLLをロードさせることができる。
ただし、DLLがロードされるタイミングは、フック対象のメッセージを受信したときなので、
SetWindowsHookEx()を実行したからといって、DLLがロードされるとは限らない。
そういう意味では
>>828 の言っていることも正しい。
hook procedureの中で、別のDLLをLoadLibraryすればいいと思うの。
マジレスするとuer32.dllがロードされているプロセス限定
>>832 システムプロセスなどに誤ロードされフック解除後も居座ることがある
再現方法は不明
h
VC++2005 EEってもう落とせない?
うちにある
質問の答えになってない 0点
そうか うpしようと思ってたけどやめるわ
誰も望んでいない 0点
PostQuitMessageを実行するとMessageBoxが表示されなくなるので PostQuitMessageを実行せずに独自にフラグを使ってメッセージループを終了するのは 良くないでしょうか?
いいよ。
845 :
818 :2009/07/22(水) 18:26:58
皆さん、レスありがとうございます。 初心者で何から調べれば分からずのレベルですので 皆さんのレスの意味があまり分かってないですが、 キーワードが色々出てきてそれだけでも助かります。 >>「TextOutのメッセージ」なんてものは存在しない(あれば楽だけど)。 そ、そんなぁ (;´д⊂ヽヒックヒック すみません、何のメッセージを捕らえればいいんでしょうか? Spy++はあります。 (ウィンドウのコントロールを調べるくらいですが) ご教授お願いします。
は?
847 :
デフォルトの名無しさん :2009/07/22(水) 18:49:13
ああん?
848 :
818 :2009/07/22(水) 18:53:59
は?も、ああん?も分からないレベルなんで。 そこを何とかお願い。
もうこの話は終わってるんだよ KY
850 :
818 :2009/07/22(水) 19:02:52
そうなの。 なら、スルーしとけばいいじゃん。 ky
メッセージとAPI関数の呼び出しは別個の問題なの。
852 :
818 :2009/07/22(水) 19:12:14
ありがとうございます。 先は長いな。(´ー`)y─┛~~
DirectShowでDRMが掛かったファイルを再生するにはどうすればいいのでしょう?
moudamedakonosure
856 :
853 :2009/07/22(水) 23:25:19
どうもMSにライセンス料1万ドル払う必要があるみたいですね・・・ むりぽ
ShellExecuteでショートファイルを指定すると 環境によっては、きちんと実行されたり 只、ショートファイルのリンク先が開かれたりするんだが これは何故? きちんと実行したい場合はリンク先のEXEパス指定しないと駄目?
動作しない環境ではその拡張子に何も関連づけされてないんじゃねえの
きちんと実行したい場合はリンク先のEXEパス指定しないと駄目
レス有難う レジストリ見てるんだね SEE_MASK_INVOKEIDLISTを指定したら、問題のあった環境でも何か動くようになったよ
GetModuleHandleで取得したモジュールハンドルから何バイトずらしたら あるクラスの関数のアドレスに行き着くか調べるにはどうすればいいですか? dumpbinで調べられるのかと思いましたが、エクスポートされている関数名しか出てきません。
>>861 DbgHelp APIの出番だと思う。
dumpbinでRVAが見られるだろ。 Toolhelpで得たベースアドレスに足し合わせれば答えがでるんじゃね?
関数名が得られたら、あとはGetProcAddressすればいいじゃない。
引き算するだけで普通にオフセットは求まるよ。
866 :
861 :2009/07/24(金) 22:22:00
>>863 クラスの関数名が表示されないのにどうやってRVAとの対応を見れば・・
>>864 エクスポート関数ではなく
クラスの関数なんでGetProcAddressは使えないんですが・・
>>861 どうしてそういうことをしたいのか説明できるか?
理由がわかれば妥当な方法を提案しやすい。
COMで実装しろよもう
>>614 わかるよ
公務員だもの
楽しょうさがね
阿保みたいな質問平気でする糞職員多いね
無試験採用か
870 :
861 :2009/07/24(金) 23:31:03
http://www.ring3circus.com/downloads/direct3d-hooking/ ここのライブラリを使ってDirect3Dを使ったアプリの画像取得をしているんですが
XPだと動くのにVistaだと動かないみたいなんです。フックしようとしている関数の
アドレスが正しいか調べる部分(VerifyAddresses()、171行目)
があるんですが、そこではじかれます。それで自分で正しいアドレスのオフセットを
調べようと思ったんですが、どうしたら調べられるのか分かりません。
↓書いてある各関数のオフセット
const long XP_OFFSET_DEVICE_PRESENT = 0x00040EA0;
const long XP_OFFSET_SWAP_CHAIN_PRESENT = 0x00039230;
const long XP_OFFSET_CLEAR = 0x00085720;
const long VISTA_OFFSET_DEVICE_PRESENT = 0x00048CDB;
const long VISTA_OFFSET_SWAP_CHAIN_PRESENT = 0x00048DB4;
const long VISTA_OFFSET_CLEAR = 0x0000E3CD;
使用OS:windows vista コンパイラ:Visual c++ 2008 ExpressEdition ファイル内容:日本語 テキストファイルから1行読み込んで(fopen,fgetws) ExtTextOutしたいのですが文字化けしてしまいます どうすればテキスト内容をそのまま表示する事ができますか? ExtTextOutの文字列指定する所に直接TEXT("日本語")で指定したら正確に表示されます ファイルから読み込んだ文字列を格納する変数は TCHAR szText[256]; ですが他の型でできるなら型変更も考えています
>>870 インターフェイスからVMTをスキャンして目的の関数のアドレスを取得する。
ジャンプテーブルだったらその先のアドレスを探す。
オフセットは普通に引き算でおk。
OSの種類やSPの違い等で変わる可能性があるから、そういった固定オフセットを使うのは意味がない。
俺のプログラムでは動的に計算してるよ。
テキストファイルのエンコードは?
>>871 プログラムの頭で、setlocale(LC_ALL, "");呼んでおけ。
あと、TCHARに読み込む関数は、fgetwsではなく、<tchar.h>の_fgetts。
876 :
861 :2009/07/24(金) 23:56:41
>>872 d3d9.hの内容を見て
IDirect3DDevice9のアドレスから4*17バイトずらしたら
Presentのアドレスになると思ったんですが
以前やったら失敗したんです。
もう1回試してみます。
877 :
871 :2009/07/25(土) 00:02:53
>>873 >>875 さんのsetlocale(LC_ALL,"")追加と_fgettsへ変更した後
Notepadの名前を付けて保存の時に選べる
ANSI
Unicode
Unicode big endian
UTF-8
どれを選んでもダメでした
Unicodeの時は描画すらされず真っ白でした
>>874 文字コード、ですか色々調べてみます
キーワードありがとうございます
>>875 その2箇所変更してもダメでした
WM_SETFONTでコントロールのフォント変えられるように 背景色を変えるメッセージってありませんか? SetBkColorではうまく背景色が変わらないので
そんな物はない
WM_CTLCOLORなんたらで何とかしろ
>>870 書き換え先の命令の並びが適切かどうか、確認。
場所は、cでpD3dDevice9->lpVtbl->Presentとかやって取得。
882 :
871 :2009/07/25(土) 01:28:22
int i=0; HDC hDC; HFONT hFont; TCHAR szInfo[30][256]; FILE *fp; _locale_t locale; locale = _create_locale(LC_ALL, "japanese"); if((_wfopen_s(&fp,TEXT("test.txt"),TEXT("r"))) != NULL) { _wfopen_s(&fp,TEXT("test.txt"),TEXT("w")); _fwprintf_s_l(fp, TEXT("テスト\nテスト2\n"), locale); fclose(fp); _wfopen_s(&fp,TEXT("test.txt"),TEXT("r")); } while(_fgetts(szInfo[i], 256, fp) == NULL) { i++; } fclose(fp); hDC = GetDC(hWnd); hFont = CreateFont(23, 9, 0, 0, 600, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FIXED_PITCH | FF_DECORATIVE, NULL); SelectObject(hDC, hFont); SetBkColor(hDC, RGB(0,0,0)); SetTextColor(hDC, RGB(100,245,100)); ExtTextOutW(hDC, 50, 50, ETO_CLIPPED, NULL, szInfo[0], wcslen(szInfo[0]), NULL); ExtTextOutW(hDC, 50, 100, ETO_CLIPPED, NULL, szInfo[1], wcslen(szInfo[1]), NULL); DeleteObject(hFont); ReleaseDC(hWnd, hDC); こんな感じでやってみましたが無理でした どうすればいいでしょうか
>>882 TCHAR/TEXTを扱う関数はwではなくt。
_wfopen_s/_tfopen_sは成功したとき、0を返す。そもそも書き込みなら初めからwで開け。
_fwprintf_s_l/_ftprintf_s_lのロケール指定は出力の文字コード変換には影響しない気がする。
というわけで、こんな風に書いたらきちんと動いたぞ。
setlocale(LC_ALL, "");
if (_tfopen_s(&fp, TEXT("test.txt"), TEXT("w")) == 0) {
_ftprintf_s(fp, TEXT("テスト\nテスト2\n"));
fclose(fp);
if (_tfopen_s(&fp, TEXT("test.txt"), TEXT("r")) == 0) {
while(_fgetts(szInfo[i], sizeof szInfo[i], fp) != NULL) {
i++;
}
fclose(fp);
}
}
あと、ExtTextOut, _tcslenな。
_printf_l系統の使い方がよく判らん。 デバッガで追うと、指定ロケールとは無関係に常に現在のロケールで変換するように見えるなあ。 折角_woutput_s_lでロケールを更新しているのに、 その後で一文字ずつ出力するのに_fputwc_nolockを呼び出したところで、 結局今のロケールに再更新されてしまっているような……
>>884 ただ、数値変換の書式とか、文字コード変換以外には影響が及んでいると思う。
でもここWin32APIスレだから、スレ違いの話は自重したい。
コントロールパネルの表示名ってレジストリに書き込まれてるの? CPIAppletからCPL_INPUIREで名前のリソースIDとか取得してもうまく行かない
WinHttpのリクエストのレスポンスヘッダをWinHttpQueryHeadersで一々取得すると、毎回ヘッダ文字列を調べるのでしょうか それとも、リクエストごとにデータ構造を持っていて引数のヘッダ識別子を使って探すんでしょうか
リクエストごとにデータ構造を持っていて引数のヘッダ識別子を使って探す
890 :
871 :2009/07/25(土) 20:59:19
>>833 >>882 の
if((_wfopen_s(&fp,TEXT("test.txt"),TEXT("r"))) != NULL) {
_wfopen_s(&fp,TEXT("test.txt"),TEXT("w"));
_fwprintf_s_l(fp, TEXT("テスト\nテスト2\n"), locale);
fclose(fp);
_wfopen_s(&fp,TEXT("test.txt"),TEXT("r"));
}
この部分ですが、本当なら最初からテキストに何か記入(notepadで)しておいて
プログラム側で処理するのですが、もしtextがなければエラーになるので
プログラム側でtextを作成するようにしています
ちゃんと思い通りに表示されました
ありがとうございましたてる!
1,8,12,13!
>>886 名前をつけて保存を選んだ時の右下の文字コードはANSIになっていました
891 :
890 :2009/07/25(土) 21:00:14
DLLのexportをつけてる関数以外の関数(公開しない関数) を書き換えても公開するための名前は変わりませんか? hoge@1とかの@1とかが勝手に変わったらDLL差し替えだけでは動かないんですよね?
yes
変わるよ
ポップアップメニューのフォントを変更するにはどうすればよいでしょうか? ボタンコントロールなど、子ウィンドウの文字の場合はフォントを作成した後、 SendMessage( hWnd, WM_SETFONT, ( WPARAM )hFont, true ); とすれば変更できました。 hWnd(HWND型)のところをhMenu(HMENU型)にしましたがダメでした。 よろしくお願いしますm(_ _)m
オーナードローかメニューっぽいUI以外実現方法はない
897 :
895 :2009/07/26(日) 02:56:24
ShellExecuteExで指定できるSEE_MASK_INVOKEIDLISTってどういう意味があるの? これを指定してリムーバルディスクを開こうとすると失敗して 指定せずに実行すると問題無く開ける
開くファイルを、ファイル名ではなくITEMIDLISTで指定するというフラグ
>>899 有難う
レジストリを見て実行と
ファイル名で実行と認識していいかな?
>>900 レジストリとは違うけれど、IShellFolderというインタフェイスを使って
エクスプローラーのようにデスクトップをルートとした仮想フォルダ階層を辿っていくときに使う
>>901 有難う
具体的に使う場面を教えて貰えないかな?
エクスプローラーのようにIShellFolderで仮想フォルダ階層を辿っていった場合に、 その仮想階層のパスは文字列ではなくITEMIDLISTで表現するので、 それを指定してファイルを開くときに使う エクスプローラー自身や、エクスプローラーのファイル階層を真似る必要があるファイラーソフト、 ファイルオープンダイアログ、ファイルブラウザなどで使う
898じゃないけど勉強になった。ありがd。
おぉ俺も使った事ないけど勉強になった
WinMainに関連付けされたウィンドウハンドルやデバイスコンテキストをほかのスレッドに渡してそのスレッドで描画処理をするのはよくない方法でしょうか?
別に問題ない
911 :
デフォルトの名無しさん :2009/07/27(月) 09:54:19
h
プロセスが終了しても自動的に解放されないハンドルってどんなものがありますか? できれば完全な一覧でもあると助かるのですが
DLL内にどんな関数があるかわかるツールとかないでしょうか?
リストボックスからENTERキーが押されたら処理したいんですが ENTERを押してもKEYDOWNが発生しません フックを使わずスマートな解決方法は無いでしょうか?
918 :
デフォルトの名無しさん :2009/07/27(月) 11:08:34
LBS_WANTKEYBOARDINPUT でどう?
>>918-919 有難うございます
サブクラスも勿論試しましたが駄目でした
KEYBORADINPUTを指定してみましたが、Enterキーを押してもメッセージが発行されません
まさかダイアログでやってて食われてるとかじゃないだろうな?
>>921 そうです!ダイアログ画面にリストを置いています
リストにEnterが行く前に、ダイアログに食われているという事でしょう?
僕も食いたい
>>917 いまいちよく分からないんだが、
WM_NOTIFYのLVN_KEYDOWNじゃだめなのか?
当然ダイアログでも通知がくるけど……
>>924 有難うございます
試して見ましたがうまく行きませんでした…
今はダイアログにリストボックスを貼付けており
リストボックスを選択した後、Enterキーを押したら処理をしたいと考えています
ですがEnterキーを押してもメッセージが発行されず
それ以外のキー入力ではメッセージが発行されている状態です
普通にWM_KEYDOWNでVK_RETURN来るな・・・ フォーカスないとか?
リストボックスにWM_SETFOCUSを投げても駄目みたいです
どうやって調べてる? spy++とか使ってみては
929 :
デフォルトの名無しさん :2009/07/27(月) 14:27:59
APIについて質問なんだがお前達のようなクズ共にわかるかなあ 夏休みだしなあ
どうせWin32以外の質問するんだろ
931 :
デフォルトの名無しさん :2009/07/27(月) 15:16:41
黙れくずが
フックかな?
図星かよ・・・
>>925 がどうやって調べてるかわからんな
Spy++で調べれば(当然だが)メッセージが発行されてるんだがな
CDialog使ってるならちゃんとVK_RETURNキャッチしろよ
またフックかよ
C#でちょちょいと作るほうが楽だ・・・
知らないならレスしないでください。ウザイだけです。
srud(
>>930 );
>>925 来ないはずないんだけどな……
LVN_KEYDOWNをググって、あちこち参考にしてみた?
BOOL CALLBACK DlgProc(HWND hDlg, UINT mes, WPARAM wParam, LPARAM lParam)
{
...
case WM_NOTIFY:
{
NMHDR* nm = (NMHDR*)lParam;
if(nm->idFrom == IDC_LIST1) {
if(nm->code == LVN_KEYDOWN) {
NMLVKEYDOWN* kd = (NMLVKEYDOWN*)lParam;
WORD wKey = kd->wVKey;
if(wKey == VK_RETURN) {
// リターンキーが押された
}
}
}
}
break;
...
}
な感じできませんか? IDC_LIST1は、当該リストビューのIDね。
あまり良く読みもせず言うのもなんだけど、コントロール作るとき通知フラグ立ててないんでない? リストボックスの作成方法が、CreateWindowかエディタかは知らないけど
941 :
925 :2009/07/27(月) 20:09:13
皆様レス有難うございます
MFCではなく、現在はSDKで開発しております
>>938 色々と調べてみましたが、やはり私のコードではうまく行きません
ダイアログにリストボックスを貼り付けており、ダイアログは以下の用に定義しています
SAMPLE DIALOG 10, 10, 200, 100
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
{
LISTBOX IDC_LIST1, 10, 10, 180, 57, WS_TABSTOP | WS_VSCROLL | LBS_NOTIFY | LBS_NOINTEGRALHEIGHT
}
リストのサブクラス、ダイアログ側でのWM_NOTIFYでLVN_KEYDOWNが来ないか試していますが
未だ解決しておりません
Spy++ではありませんが、簡単なメッセージフックは使用してやり取りは見ております
既定のボタンかIDOKが飛んで来るところで処理したら駄目なのか? それならリストボックスをサブクラス化して、 WM_GETDLGCODEでDLGC_WANTALLKEYSを返すしかないな。
なにー。 WM_GETDLGCODEを処理してなかったのかよ……OTZ
自ソフト外の現在のカーソルあるところにキーボードを押して文字を入力したように 認識させたいんだけど、どうすればできマッスル?
SendInput();
LVN_はListViewだろ
VC++2008で作ったDLLもWin9x系は動かない?
有難う VC++2005とborland freeコンパイラどっちがいいかな?
950 :
デフォルトの名無しさん :2009/07/28(火) 10:49:55
951 :
デフォルトの名無しさん :2009/07/28(火) 11:01:10
VCってwwwwwwwwwwwwwwwwwwwwwwwwwwww
>>952 設定で対応出来たっけ?
EXEのバイナリを弄ればいけるけど、推奨は出来ないな
普通にコンパイラオプションでなんとかなるし
MSが2008では無理って言ってなかった?
This topic lists the breaking changes in Visual C++ 2008. The Windows 95, Windows 98, and Windows ME platforms are no longer supported. These operating systems have been removed from the list of targeted platforms.
Win95,98,MEはplatformsではもうサポートしません platformsの対象から削除されました
コンパイルオプションとか言ってる奴どうやってんだ?
スタートアップルーチン差し替えてるとか?
プロパティーシート使うとき EndDialogはしては駄目らしいが何故? WM_CLOSEで使ってるが別に問題ないんだが
呼んじゃいけないのは各ページの中でじゃないの?
>>961 有難う
プロパティシートのOKボタンで閉じる場合は
それぞれのダイアログに強制WM_CLOSE発行してEndDialog呼んでるけど
閉じる時だから問題ないって事だよね?
963 :
デフォルトの名無しさん :2009/07/28(火) 14:34:04
だってVCだもんwwww
_,._ ( ・ω・) ○={=}〇, |:::\,',´ 、、、し、、(((@)wwww _,._ (・ω・ ) ○={=}〇, |:::\,',' www、、、、、し、、(((@) _,._ ( ・ω・ ) ○={=}〇, |:::\,',' wwwwwwし、、(((@) ,,' _,._ ((((( ・ω・ )))) ',` `ヾヽミ三彡ソ´ w ', )ミ 彡ノ',`' ',`' (ミ 彡゛ w Σ ', \( ',` ',`' )) ',`Σ wW\\ ( //Ww
VC++の「オプション」ウィンドウ等では、spy++で見たところダイアログにツリービューとダイアログが貼り付けてあるのですが、 ダイアログにダイアログを貼り付けるにはどのようにすれば良いんでしょうか
これプロパティシートの1種じゃないのかな
プロパティシートの左側を余らせて、ツリービューを貼り付けてるってことですか? OKキャンセルボタンの上に、プロパティシートと同様の区切り線があるからそうかもしれませんね ありがとうございます
VC++で例外をスローしたときのスタックフレーム情報を表示したいのですが(Linuxのbacktraceのようなもの) どうすればできますか?
>>968 ですが、自己解決しました
StackWalkを使えばできそうですね
IWebBrowser の 再読み込みを知ることってできないでしょうか?
知らないならレスしないでください。ウザイだけです。
UNICODEにも対応するため、GetWindowText等に渡すバッファサイズを sizeof(buf)/sizeof(buf[0]) とやってるんだが、これてビルド時にサイズ決まるよね?
bufの定義次第
TCHAR buf[MAX_PATH]; と定義してる MAX_PATH渡せば良いが、bufのサイズが変わったら面倒だからさ
_countof
親ウィンドウと子ウィンドウがたくさんある状態で 常に親ウィンドウにフォーカスがある状態にするにはどうすればいいですか?
>>975 このスレとしてはARRAYSIZEも推そうよ。
#define RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0])) ( ゚,_J゚)
976なんですがこれだけじゃわかりませんよね 複数のウィンドウがある場合に 最初のウィンドウのクライアント領域を即操作出来るように 最初のウィンドウを常にアクティブ状態にしたいのですが可能でしょうか 他のウィンドウを操作した後だと、最初のウィンドウを操作するためには 一回クリックしなければいけないと思うのですがそれをなくしたいのです どなたかアドバイスを
他のウィンドウを操作する時もその操作が親ウィンドウにも行っちゃうじゃん
すみません976は間違いで 他のウィンドウというのは子ウィンドウじゃありませんでした
>>981 最初のウィンドウを常にアクティブしっぱなしにすると
他のウィンドウが操作出来ないということでしょうか?
それで悩んでいるんです
アクティブというか1クリックせずに操作出来ないのかなと
可能
タブコントロールをTCS_BUTTONSで指定して作成し、その後タブを3ページ追加しました。 見かけは、ボタンスタイルでタブが作成されてうまく行っているように見えるのですが タブをクリックしてもWM_NOTIFYイベントでTCN_SELCHANGEが やって来ないので困っています。 TCS_BUTTONSを外すと、通常のタブが作成されてWM_NOTIFYイベントでTCN_SELCHANGEが やってきます。 TCS_BUTTONSの有無でタブコントロールの振る舞いが違うのでしょうか? ご存知の方、アドバイスお願いします。
補足です。 環境は、WINDOWS XP PRO SP3 VC++6.0です。
1
TCS_BUTTONSってVisualStyleが無効になるので使い物にならない
埋め込みリソースのダイアログボックスでコモンコントロール使う時も、やっぱりInitCommonControlsは必要ですか? それともコンパイル時にうまくいくようにしてくれてるんでしょうか
InitCommonControls 自体の中身は空っぽで、 強制的に関連モジュールをロードする意味で呼出すと聞いたことがあると思う。 日本語版 Windows だと IME コントロールを通じて 大抵はロード済みなので無くても動くように見えるが、 呼んでおくのが無難と言われている。 リソースが埋め込みでも関係ないはず。 必要なくても呼んだからって問題になるわけでもないので迷ったら呼んどけ。
993 :
990 :2009/08/01(土) 21:03:51
なるほど、ありがとうございました
MSはファイルサイズを求めるまともな関数を非公開にしてるようだな。 ANSI Cだけでファイルサイズを求める方法を改善しようと思ったが、Win32 APIや MFCやBorlandのVCLのいずれも、ファイルハンドルが必要のようだな。そのファイル ハンドルは、ファイルをオープンして取得しないといけないし、ANSI Cよりも難しい 内容だし。 エクスプローラやDIRコマンドでファイルの一覧を表示するのって、何もWindowsは ファイルハンドルを取得してるわけではないだろう。恐らく、ハードディスクに 記録されているファイルの実体とは別の領域に記録された登録簿の情報を読んで るだけだろう。 ファイル名の文字列を引数に与えるだけで良いVB6のFileLen関数や、NET Frameworkの FileInfoクラスのLengthを使うほうが、(ANSI Cに比べて)ハードディスクのアクセス が少なくて早く処理できてるし、恐らく恐らく登録簿から読み取ってるのだろう。 MSは他社の競争力を押さえるために、一部のシステムコールを隠すのか。
一部を訂正しとく エクスプローラやDIRコマンドでファイルの一覧の作成で、ファイルサイズ を取得するために、ファイルハンドルを取得しているわけではないだろう。
ioctl あたりじゃねーの? それで何か不満なのか?
windows だと DeviceIoControl か
ntfs だと sparse ファイルとかシンボリックリンクもあるから用途によってはちょっと工夫がいるけどな
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。