引き続きクソスレクソレスの嵐をお楽しみください
前スレの991さんへ これですこれです 出来ましたありがたや
それじゃない それじゃない コンソールアプリとして組んで(int mainエントリー) GUIも使う それが出来てからWinMainエントリーなGUIアプリ に改造する これが常道。 WinMainから始めるのは外道
そんなやり方もあるんですか? よかったらそれも教えてください subsystemスイッチを消すとエントリポイントを勝手に探してくれるのは知ってるけど GUI用のメッセージキューとか?は どうやって準備するんですか?
てか今時コンソールにメッセージ出すんじゃなくて ファイルにHTMLとかでメッセージ出したほうが 見やすくね?表とかに整形して出すこととか 出来るし、フォントの大きさも色も変えられるし...
何も変わらない WinMainがなにか用意してくれたか?
なるほど。hInstanceにGetModuleHandle(NULL)渡したら普通に出来ました こっちはGUIが終了してもコンソールは残るのか
>>7 実は外道と常道なんてちょっとした差
でしかないという考えもある。ブラウザ
とかインフラが揃っておるご時世、
UNIXのシェルアプリのような組み合わせ
て使ってナンボなアプリにするわけでもな
きゃ、最初からコンソール出力はせず
>>9 のようにリアルタイムにHTML出
力してブラウザでログを眺めるというよう
なやり方もありだとオモ
いつまでもあると思うなカネとブラウザ ってか?
できた! int test() { HKEY hRootKey; char KeyName[512]; strcpy(KeyName, "SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v2.0.50727"); if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, KeyName, 0, KEY_READ, &hRootKey) != ERROR_SUCCESS) { printf("err!\n"); return 0; } DWORD dwType, DWordValue, cbBuff; dwType = REG_DWORD; cbBuff = sizeof(DWordValue); if (RegQueryValueEx(hRootKey, "Install", NULL, &dwType, (LPBYTE)&DWordValue, &cbBuff) != ERROR_SUCCESS) { RegCloseKey(hRootKey); printf("err!\n"); return 0; } RegCloseKey(hRootKey); printf("dwType=%d\n", dwType); printf("DWordValue=%d\n", DWordValue); return 0; }
Ctrl+Oでファイルを開くとかのアクセラレータキーって 対応するメニューアイテムないと使えないんでしょうか ショートカットキー込で再利用できる部品を作れないかと思ったんですが メニューアイテムとセットになってるんだとすると そういう部品化は出来ないってことになりますよね?
独自でアクセラレータテーブル作って非メニューコマンドを実装することはできる CreateAcceleratorTable()で作ったハンドルをTranslateAccelerator()に渡すだけでよい 複数のハンドル作れば、PCゲームみたいな1つの操作に複数のキー割り当て的なこともできる
EnumWindowsて先に起動された順に列挙していくの?
何を言ってるんだ
だから 早く起動されたアプリの情報から順番に プロシージャへ渡されるの?
EnumWindows で取得できるウィンドウと、プロセスには直接の関係はない。
21 :
デフォルトの名無しさん :2010/02/06(土) 19:00:01
Win32APIって.netでも使えますか
使えます。
24 :
デフォルトの名無しさん :2010/02/07(日) 00:03:34
うぃなぴ
全スレは史上最低の無駄スレだったな
そうだなすべてが無駄だ
27 :
デフォルトの名無しさん :2010/02/07(日) 13:32:15
winsockとSocketクラスってどっちが優れてるの
… Socketクラスはwinsockで実装されてるんじゃないかな
ツールバーのボタンの右横に、▼マークのついた メニューボタンをつけるにはどうしたらいいの?
TB_SETEXTENDEDSTYLEとTBSTYLE_EX_DRAWDDARROWS
うまくいかないと思ったらMSDN確認するくらいの気で行けば平気
本家というかMSDNライブラリ(
>>1 )を信頼したほうがいい
apiで数式エディタを作りたいのですが 参考になるサイト等がありましたら教えて
参考になるサイトっていうのは APIで数式エディタを作ろう!みたいなタイトルでサンプル提供してるような所を指してるの? そんなニッチなもんあるわけねえだろ
数式エディタは難しいよ Σとかどうやって作るんだよ
数式を表示できるソフト普及するよりは、コンピュータに適した形で 数式の体系自体を変えるべきだと思うんだ
Tex最強!
ツールバーのドロップダウンメニューにチェックマークを付けたいのに クリックしても何もおこらないんですがなんでですかねえ HWND hToolbar; HMENU hPopupMenu; LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { switch (msg) { case WM_COMMAND: { if(LOWORD(wp) == 50){ MENUITEMINFO info; info.cbSize = sizeof(info); info.fMask = MIIM_STATE; GetMenuItemInfo(hPopupMenu, 50, false, &info); if(info.fState == MFS_CHECKED){ info.fState = MFS_UNCHECKED; SetMenuItemInfo(hPopupMenu, 50, false, &info); } else { info.fState = MFS_CHECKED; SetMenuItemInfo(hPopupMenu, 50, false, &info); } DrawMenuBar(hToolbar); } return 0; }
つづき case WM_NOTIFY:{ #define lpNM ((LPNMHDR)lp) #define lpnmTB ((LPNMTOOLBAR)lp) RECT rc; TPMPARAMS tpm; if(lpNM->hwndFrom == hToolbar && lpNM->code == TBN_DROPDOWN){ SendMessage(lpnmTB->hdr.hwndFrom, TB_GETRECT, (WPARAM)lpnmTB->iItem, (LPARAM)&rc); MapWindowPoints(lpnmTB->hdr.hwndFrom, HWND_DESKTOP, (LPPOINT)&rc, 2); tpm.cbSize = sizeof(TPMPARAMS); tpm.rcExclude.top = rc.top; tpm.rcExclude.left = rc.left; tpm.rcExclude.bottom = rc.bottom; tpm.rcExclude.right = rc.right; hPopupMenu = CreatePopupMenu(); AppendMenu(hPopupMenu, 0, 50, TEXT("開く(&O)")); TrackPopupMenuEx(hPopupMenu, TPM_LEFTALIGN| TPM_LEFTBUTTON| TPM_VERTICAL, rc.left, rc.bottom, hwnd, &tpm); DrawMenuBar(hToolbar); }
Windowsで開発したことないんですが、 あるスレッドが複数のイベントを待ちたい場合ってどういうふうに 設計するのが一般的でしょうか? 複数のイベントとは、片方はソケットからの入力、 もう片方は他のスレッドからの要求です。 MsgWaitForMultipleObjectはソケットが待てないっぽいんで。 環境はCで、MFCなしです。
windowsプログラミングでオブジェクト指向なコードが書きたいときって、アンマネージド限定でどうするのがベター? メインウィンドウのプロシージャに振り回されて、まともな設計ができない
>>44 むしろ、MsgWaitForMultpleObjectでソケットが待てないソースを教えてほしい。
WaitForMultipleObjectsとかでもソケット使えるのだから、
直感的にはMsgWaitForMultpleObjectでダメとは思えないのだけど。
>>45 Windows API自体オブジェクト指向の固まりだと言うことに気付け。
ハンドル1つ1つがインスタンス。
それはともかく、ウィンドウプロシージャをクラスのメンバ関数にする方法は
いくつかあって誰か書いているはずだから、ググれば見つかる。
それでメインウィンドウという括りで1つのクラスが出来上がる。
ExtTextOutで文字を表示する時に等間隔にしてくれるような関数ありますか? 例えば日本語(全角)5文字表示する所に半角10文字のスペースを上書きしても 日本語の方が横長みたいで全て埋まらないのです まとめると、全角5文字を半角10文字のスペースできっちり埋めれるようにするような関数はありますか?
等幅フォントは?
>>50 CreateFontのcharsetに等幅フォントやってみようと思います
ありがとうございました
53 :
44 :2010/02/09(火) 08:44:11
>>46 *WaitFor*Objectで待てるものに、ソケットが対象になっていませんでした。
ハンドルしか待てないからソケットは待てないと思っているのですが、
何か方法があるのでしょうか?
単純に待つハンドルの配列にソケットを突っ込めばいけてしまうとかでしょうか?
MFCのAPIを使えば、ソケットとハンドルが関連付けられてWaitFor*でも
待てるっぽいところまでは分かったのですが、今回はMFCが使えないので…。
>>43 毎回CreatePopupMenu呼んでるから
他のスレッドからの要求もソケットでやればいいな
CSSパーザ探してます。 だいぶ昔に作り捨てたプログラムではスタイルシートをres:プロトコルでIEコン ポーネントに流し込む手法を使いましたが、この方法は使えなくなってしまった ようで、IHTMLStyleSheet::addRuleで流し込む必要ががあるようです。 元データ自体はCSSの文法で持ちたいので、C/C++から利用できるフリーのCSSパー ザまたはIEコンポーネントの再利用法は有りませんか?
>>57 です
正規表現だけでいけるような気がしてきたので質問取り下げます。
TEXTマクロって1バイト文字には使わなくていいんだよね?
_tcslen()に1バイト文字入れてみ
unicode/MBCSをコンパイルオプションで切り替える、ってことをしないならTEXT自体使わなくていい。 切り替えるからTEXT使う、なら基本は全部に使う。(処理の詳細的に使わない場合はあり得る) 切り替えないけどLよりTEXTが好き、でも別にいい。 だいぶスレ違いな気がする。
62 :
デフォルトの名無しさん :2010/02/09(火) 19:06:03
ファイルが関連付いているアプリケーションのアイコンを取得したいと思っています。 ExtractAssociatedIcon という API を使用すると 32 x 32 のアイコンしか取得することができません。 48 x 48 のアイコンを取得したいのですが、どのようにすれば良いでしょうか?
漏れの記憶では xn_resourceeditor
>>56 ありがとです。
いろいろ検討してみます。
IMPLEMENT_DYNAMIC(CCustomFileDialog, CFileDialog) CCustomFileDialog::CCustomFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName, DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) : CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd) { m_customDlgPtr = this->GetIFileDialogCustomize(); if(m_customDlgPtr != NULL){ m_customDlgPtr->AddComboBox(IDC_COMOBOBOX1); m_customDlgPtr->AddControlItem(IDC_COMOBOBOX1,101,L"foo"); m_customDlgPtr->AddControlItem(IDC_COMOBOBOX1,102,L"bar"); } } BOOL CCustomFileDialog::OnFileNameOK() { DWORD Item; m_customDlgPtr->GetSelectedControlItem(IDC_COMOBOBOX1,&Item); return CFileDialog::OnFileNameOK(); } コンボボックスから選択中のアイテムを取得できたんだが、そこから文字列を取得する方法がわからない。 くぐってもさっぱり出てこないので教えてほしい。
66 :
デフォルトの名無しさん :2010/02/10(水) 10:35:41
コア別のCPU使用率を取得する方法を教えてください。
パフォーマンスカウンタの値を見る パフォーマンスカウンタデータヘルパーAPIっていうバカ長い名前のAPIがあるのでそれを使います
>>65 記憶によると、comboboxの各アイテムに文字列へポインタをユーザ定義のデータと
して埋め込んでおく。
コントロールの文字を小さくするには?
小さいフォントをセットすればいい
>>65 選択中のならGetWindowText()でできた希ガス
リストボックスのほうならCB_GETLBTEXTとか
AnimateWindowでウインドウのフェードアウトをする方法を検索すると、 AW_BLEND | AW_HIDE としているのが見つかるのですが msdnには、AW_BLENDとAW_HIDEを併用してはいけないと書いてあります。 どうやればいいのか教えてください。
英語版のMSDNにはそんな事書いてないけど、日本語版が間違ってるんじゃ?
日本語版は間違いだらけ 戻り値 True/False 間違えてて正反対の意味なんてことも
msdnに間違いがあるとは考えませんでした ありがとうございました
MSDNだけじゃなくて ●●入門とかの言語とかフレームワークとかの書籍も結構致命的な間違いがある
ツールバーとステータスバー 両方画面の下に共存させるにはどうしたらいい?
>>76 APIは一度公開したらインターフェースを返ることは
出来ないからな。使われない余計なパラメータがあ
ったりするのはそういう理由だし。
時には内容はほぼ同じだがインターフェースだけ
変えたAPIとかあるらしいし。古いAPIの更新を
やめて新しいAPIとして管理していくというやり方
を取らざるを得ないケースも多いだろうし
結局数は増える一方。墓地の埋葬者名簿みたいな
もので正確性を永続的に保証できるものじゃない
だろ
日本語ページが正しくないことの言い訳としては筋違い。
>>81 その言い訳は「かつては正しかった」という根拠を出してからにしろ。
>>81 >墓地の埋葬者名簿
いいたとえだなw確かにそうだ
関数の戻り値の一貫性とか破綻してるから困ったもんだな・・・
MSの技術者でさえこんな設計するんだから 一般人のコードが汚くても誰も責めることはできない
いっしょにコードを 書きませんか? ∧_∧ [windows.h] (・ω・)丿 ッパ . ノ/ / ノ ̄ゝ
MSに言えよ
Win関連の訳本はASCII時代がよかったな、1000ページ本とかバンバンだしやがって・・・
肘で押えながら検証コード打ったりな
>>88 そもそも、何でNot usedなのにBOOL返すようになってるんだ?
>>92 元々 BOOL で使用されていたが
ドキュメントが糞で誰も使わなくなったから
Not used に書き直された
VC++でヘッダーコントロールを扱っていますが、 HDITEM hdi; SendMessage(hwnd,HDM_GETITEM,0,(LPARAM)&hdi); sprintf(str1,"%d",hdi.cxy) でヘッダーアイテムの幅が取得できるはずなのですが、上手くいきません 参考書はVC++逆引き大辞典です どうしたらいいでしょうか?
一応、FALSEを返す状況もあるんだけどな。
HttpQueryInfoでヘッダーの内容を全部文字で見たい場合に HTTP_QUERY_RAW_HEADERS_CRLFを指定してるのですが どうも中に書き込まれた情報は2バイトコードになっているようです この辺の文字コードを切り替えるにはどうすればいいのでしょうか?
97 :
96 :2010/02/11(木) 23:43:54
自己解決しました 参考にしたソースがwchar_tを前提にしてない古い物だったのが原因でした
Windows 7 Home Premium 64bit版のPCで Win32 APIを使ってアプリケーション製作できる?
できる
Wininet関連のプログラム書いてるんですが 勉強もかねてHTTPの要求ヘッダの中身がどうなってるかみたいのですが どうやれば見れますかね?
このスレで聞くってことは、パケットを見るプログラムを作りたいって話か?
103 :
デフォルトの名無しさん :2010/02/12(金) 01:33:38
HttpQueryInfoで受信情報のヘッダーは見れるので 送信側も何か方法があるのかなあと思いまして
自分で鯖を立てて送られてくる情報をみるかWireSharkのようなモニターソフトで見るのが早いですかね・・・?
実際のデータがどうなってるかって事だろ? パケットを見るプログラムじゃないか
107 :
デフォルトの名無しさん :2010/02/12(金) 02:06:11
>>106 いや・・・そういう風に言われても勉強初めてすぐなのでよくわからないです
InternetOpen
InternetConnect
HttpOpenRequest
HttpSendRequest ←この段階で送るであろうデータさえ見れればよかったのですが
しつこい!
チェックの入っているラジオボタンのウィンドウハンドルを得るにはどうすればよいのでしょうか。 SendMessageで総当たりをすればどれにチェックが入っているのか分かりますがもっと良い方法はありませんか? ラジオボタンがチェックされた時に生じる処理の中でそのハンドルを記憶させるようにしてみたのですが、 グループが複数あった場合にそれがどのグループのボタンなのか判断させる方法がわかりませんでした。 Borland C++ 5.5.1 for Win32を使っています。
111 :
110 :2010/02/12(金) 02:20:56
すみません何か勘違いしてました。 自己解決しました。
見た目を分かりやすくしようとラジオボタンをグループボックスで囲んだところ ラジオボタンをクリックしたときにWM_COMMANDが発生しなくなってしまいました。 どうすれば再びそれが発生するようになりますか?
C++ってあるけど上の方に メモ : このプロパティは、.NET Framework version 2.0 で新しく追加されたものです。 ってあるからC++/CLIの話かね・・・ というかWTLやMFCって.netと比べるとかなり見劣りするからなあ .net環境で作ってていきなりネイティブC++とかいくと部品の陳腐さに泣きそうになる
115 :
113 :2010/02/12(金) 06:27:51
直接は無さそうね 作るにはTVM_GETNEXTITEMかな
>>114 修羅の国では外部コンポーネント、サービスの利用方法や足りない部品は全部自力調達ですよ( ^ω^)
先輩・・・.NETしたいです
いいや駄目だね お前は一生修羅の国から出さん
でもどっとねっつはリバースしやすいからなあ
C++のお陰でソフトウェアの進歩は10年遅れたわな
>>120 いや C++ が糞なおかげで
Rupy や Python が生まれたと思う
C++ の出来が良かったらきっと
そいつらは生まれていなかった
122 :
デフォルトの名無しさん :2010/02/12(金) 10:09:51
画面の解像度を取得する方法を教えてくれ
げっとしすてむめとりくす
>>125 今時のライブラリでデフォルトUTFじゃないとか死ね
127 :
112 :2010/02/12(金) 14:29:15
悪阻
131 :
113 :2010/02/12(金) 19:53:16
>>116 >>117 やはり自力で組まないといけないんですね
ぬこにつられて修羅の国に迷い込んでしまったようです
ありがとうございました
.Netだとオブジェクトを動的に作る際名前に階層を盛り込んだけどなあ とC++のTreeView調べてたらアイテムの構造体ってろくな情報埋め込めないなw typedef struct _TV_INSERTSTRUCT { HTREEITEM hParent; HTREEITEM hInsertAfter; TV_ITEM item; } TV_INSERTSTRUCT, FAR* LPTV_INSERTSTRUCT; 自分で同じような複製ツリーを作ってそっちで管理してみたら?
typedef struct _TV_ITEM { tvi UINT mask; HTREEITEM hItem; UINT state; UINT stateMask; LPSTR pszText; int cchTextMax; int iImage; int iSelectedImage; int cChildren; LPARAM lParam; } TV_ITEM, FAR *LPTV_ITEM; こっちもあるけどノード登録の際の連絡用とか検索ででてくるなあ
>>132 おいこらTVITEMの中身見ろw
大体win32がヘボかったら.netもヘボくなるわけで・・・どっちも同じコモンコントロールなわけで
136 :
113 :2010/02/12(金) 21:10:43
137 :
デフォルトの名無しさん :2010/02/13(土) 21:17:25
タブコントロールは CreateWindowEX で作成するとのことですが、 メイン・ウィンドウのメニューから[設定]なとの項目をクリックして、 タブコントロールのウィンドウをポップ・アップさせる場合の手順は、 1)CreateWindowEX でタブ・コントロールの親ウィンドウ (hwndParent) を作成. 2)hwndParent の子ウィンドウとして CreateWindowEX でタブ・コントロールを作成. するという手順になると思うのですが、ここで、タブ・コントロールを操作する メッセージなどを処理するプロシージャ−が必要になります。ところが、 CreateWindowEX にはご存知のとおりプロシージャ−関数を受け取る引数はありません、、、 ということは、hwndParent にメッセージ・ループを作らざろうえず、メイン・ウィンドウの メッセージ・ループと”競合?”してしまうので、 A)hwndParent はスレッドを作って、そこでメッセージ・ループを回す??? という、プログラミング・スタイルになると思うのですが、違いますが??? 当方、初心者でして、ズバリご指摘おねがいします。 タブ・コントロールに限らず、ダイアログ・テンプレートを使わずに メイン・ウィンドウからコントロールの Owned ポップアップ・ウィンドウを開く場合 の手順は、どうなるのでしょう???
設定ならプロパティシート使った方が簡単だけど、自分で作る場合の話なら タブコントロールからのメッセージはその親ウィンドウにWM_NOTIFYとして飛んでくるので すべて親ウィンドウのプロシージャで処理できる それと、ウィンドウプロシージャはCreateWindowExでなくウィンドウクラスで設定してそれをCreate〜に渡してる タブコントロールのウィンドウプロシージャはWindowsが持ってるのでそっちに全部お任せ これはタブコントロールに限らずどんなコントロールでも同じなので プログラムを作る側は親ウィンドウのプロシージャのことだけ考えればいい
139 :
デフォルトの名無しさん :2010/02/13(土) 22:05:23
リストボックスをウィンドウのサイズが変更されても常に中央に配置されるようにしたいのですが どうしたらいいのですか?
ありがとうございます。 『タブコントロールからのメッセージはその親ウィンドウにWM_NOTIFYとして飛んでくる』 とのことですが、タブコントロール単独でポップ・アップ・ウィンドウをつくれるのでしょうか? タブコントロール単独でポップ・アップさせようとすると移動もサイズ変更も閉じることもできません、、、 タブコントロールを子ウィンドウとしてポップ・アップさせると、メッセージはタブコントロールの 親に行くのですが、その「親」≠「メインウィンドウ」なので、タブコントロールの「親」に、メッセージを 受け取るプロシージャ−が必要になるのではないですか??? 自分はなにか、根本的なところで勘違いをしていると感じるのですが、それが「何か」がわからない ところが、トホホな現状です。 (T皿T)
ウィンドウのサイズを元に座標を算出してMoveWindowすればよかろうに
>>140 親ウィンドウはあなたが
>>137 で言っていたhwndParentだよ
メインウィンドウを親としてhwndParentを作ってタブをhwndParentの子ウィンドウにする
hwndParentを自分でウィンドウクラスを登録するなりして作成すれば、そのウィンドウプロシージャは自分で管理できる
つーか、どこのウィンドウアプリでタブがポップアップするんだよ? そんなのありえないことくらい、普通わかるだろ?
……、すいませんでした。 自分が作ろうとしていたのは、『プロパティシート』であって、『タブコントロール』では ありませんでした、、、、、、 orz。 どうもおかしい、なにか変だと思っていましたが、『プロパティシート』を『タブコントロール』と ”根本的に勘違い”してました。お騒がせしました。
レジストリの値が変更されたことを知るAPIは有りませんか?
APIHook
RegNotifyChangeKeyValue
そのてのapi hookってx64でも使えるっけ?
つかえるみたいよ
マウスカーソルを砂時計にしたいのだけど HCURSOR cur = SetCursor(LoadCursor(NULL,IDC_WAIT)); とやってもカーソルがかわらないです。
WM_SETCURSOR
HCURSOR cur = SetCursor(LoadCursor(NULL,IDC_WAIT)); したあとはWM_SETCURSORでreturn 0;するようにしたけど 状況かわらずでした。
>>154 デフォルトで表示するカーソルはなしにしておいて
WM_SETCURSORの都度表示するカーソルを任意に指定するってことね
脳みそ足りなくて理解に時間がかかりますた
脳みそとクソ知識が足り過ぎていて理解の邪魔をしてるんだろな
CPUのインストラクションキャッシュをクリアするような APIがあったと思うんですが名前を忘れてしまいました。 ご存じの方いらっしゃいませんか? やりたいことは実行時にコードを書換えながら実行するというようなことです。
FlushInstructionCache
プロセスハンドルからメモリに展開してるプロセスのサイズとかってどうやって取得していますか?
>>158 そのまますぎて吹いた orz
ありがとうございます
>>159 ヒープのスナップショット取って合算するくらいしか思いつかない
162 :
159 :2010/02/15(月) 20:33:49
>>161 別なアプローチがあるかと思って聞いたのですが、
やはりそれしかないですか
ありがとうございました。
エディッタなどの編集画面は、RichEditコントロールとかが使われているのでしょうか? それともウィンドウに直接”描画?”してるのでしょうか?? 後者の場合、マウスでハイライト選択するのは、どうやって実現しているのでしょうか。 マウスの押し下げメッセージを捕らえるとして、どんな関数を使うのでしょう?
SPY++やフックでぐぐれ
CreateProcessで生成したときのLPPROCESS_INFORMATION構造体のプロセスIDで CreateToolhelp32SnapshotのTH32CS_SNAPMODULEを指定して実行したら エラーになるんですが、何か心あたりがある方はいますか?
>>163 HTMLでクリッカブルマップ辺りを使ったページを
作ってみると「霊感(インスピレーション)」を得れるかも
他人に聞く前にOSに聞け。
>>163 マウスのY座標からそこが何行目かを計算する (例えばフォントの高さで割るとか)
マウスのX座標と行数からそこが何文字目かを計算する (例えば行中の文字幅を1文字ずつ数えるとか)
求めた位置に基づいて選択範囲を保持する変数を変更し、その部分を再描画する
各文字を描画するとき選択範囲内だったらその文字は背景色付きで描き、選択範囲外だったら普通に描く
およそこんな感じ
169 :
163 :2010/02/16(火) 15:07:49
ありがとうございます。 …、すごい”低レベル”なことをするんですね。C言語ではじめて文字列操作を やろうとした頃を思い出しました。
低レベルも何も、隠匿されてるだけであらゆる環境の同じ目的の関数は、 全て同じような手順で実現されてるんじゃないの?
Win32アプリケーションでAllocConsoleを使わずにコンソール画面を表示する方法はありますか?
172 :
デフォルトの名無しさん :2010/02/16(火) 15:58:32
知らないならレスしないで下さい。ウザイだけです。。。
>>172 そういう無意味に煽るだけのレスは、せめてどのレスに向けたものか示しておけよ。
174 :
デフォルトの名無しさん :2010/02/16(火) 16:13:23
>>173 知らないならレスしないで下さい。ウザイだけです。。。
>>171 コンソールアプリを起動してAttachConsole
177 :
デフォルトの名無しさん :2010/02/17(水) 15:33:54
editウィンドウをただの黒い線の枠じゃなく 立体的なデザインにするには?
テキストエディタ作ると結構奥が深いんぜ 最大の敵は垂直スクロールバーとウィンドウ幅に合わせた行折り返し
えっ
180 :
デフォルトの名無しさん :2010/02/17(水) 18:40:12
ええっ
・・・そんなに難しいか?
テキスト編集は編集中のデータ管理だろう まあListと同じで部品化すれば問題ないか
メモ帳みたいにテキストボックス貼り付けるだけなら簡単だが、 秀丸みたいに内部データ管理から画面描画まで全部作って実用的な速度で動かすのはかなり大変 まあ最近はCPUが速いしメモリも大量に積んでるから、そういう環境限定なら難易度は下がるけど
逆。難易度は逆に上がる。手に馴染むのが決め手なコントロール系 の製品開発は、遅いプロセッサで負荷をかけた状態でテストされ プロトタイプが出来てからも何回も書き直される。 速いマシンで製品レベルのものが作れるのは余程の経験者か天才。
お前らが作ったことが無いのは分かった
俺ちょうど今作っててやとスクロールできるようになったぐらいなんだけど
>>178 の言ってることはわかるような気がするよ、場合分け増えるし
たとえば一行が長くて折り返しがある行の時に右端にカーソルがある時
折り返す前の行の右端と折り返した後の行の左端は(ドキュメント的には)同じ位置
しかし画面では別の位置なのでカーソルを移動させたときに
前行の一文字手前で次の行にいくか、
次行の先頭行の最初の位置にカーソルがいかないようにするか
改行で表示行が変わってるときとでは動作が異なるから場合分けが増える
この辺ソフトによって動作が違ってて、GreenPadは後者、Terapadは前者だった
両方に表示しちゃえばいいじゃない
貴様らスレ違い
スレ違いを承知で質問です。 (A) と (B) で見る AppriData構造体のデータは、整合性が取れてると思うのですが違いますか?? ***** Main.c **** struct AppriData; main() { funcA(); } ***************** **** funcA.c **** extern struct AppriData; funcA(VOID) { AppriDataを処理; (A) …… funcB(); } ***************** **** funcB.c **** extern struct AppriData; funcB(VOID) { …… AppriDataを処理; (B) } *****************
すいません、、、他所のスレがあまりに下らないので、みなさんにお願いします。
192 :
デフォルトの名無しさん :2010/02/18(木) 18:45:01
m9(^Д^)プギャーーーッ
appliだろjk
まずは変数宣言しろよ
>>189 >整合性が取れてる
の意味がわかりません
構造体はヘッダに書いて include 汁
もうだめだこのスレ
まじでか
スレの存在自体無理がある まともな質問の回答はMSDNに書いてある MSDNに回答が無い質問は環境依存
まじでか
>>199 それマジで言ったん?ソースあんならすぐ出せ
マジなら2ちゃんねら総力を上げて潰すが
MSDNを潰すのは勘弁してくれw
総力ってお前誰だよ 今ふと思ったが 妙に「ねらー」とか「2ちゃんねら」とか言うの多いな なんつうかν速慣れしてなそうな感じの
一応突っ込んどくがそれ最近流行ってるコピペなんだぜ・・・釣りだったかな?
しらんかった。
一応突っ込んどくがそれ最近どころか数年前に流行ったコピペなんだぜ・・・釣りだったかな?
最初に言った人はマジなんだろうな
はじめに見たのは1年半くらい前だった希ガス
一応突っ込んどくがそれ最近流行ってるコピペなんだぜ・・・釣りだったかな?
「総力を上げて潰す」は2007年7月頃に流行
212 :
デフォルトの名無しさん :2010/02/19(金) 18:49:20
ウィンドウサイズの変更時などノ時 ステータスバーに表示された文字が再描画されないんですが どうしたらいいの?
む
おっ、書けた。 それでは質問させてください。 Windows Vista以降で、タイトルバーに3つのシステムボタンに加えて独自のボタンを自分のアプリのウィンドウに表示したいのですが、 どういう風に書けばいいでしょうか? C#で書いてますが、C/C++の書き方で構いません。
WM_NCPAINTで描く。
>>215 それは最初に試しましたが、
Aeroが有効時にはDefWindowProcの呼び出しで完全に描画されてしまい、
その後から書いても書き込んだ内容が見えません。
keybd_eventでalt+numpadの文字入力はできないの?
>>217 Altキーはメニューが受け取るようにWindows自体が作られているから、
そういうショートカットキーは避けた方がいいんじゃね?
>>214 BITMAP作ってリソース読み込めばいいんじゃない?
>>219 おっしゃることがよく分かりません。
タイトルバーをなるべくOS標準のまま、必要最小限のカスタマイズをしたいのですが。
描画さえちゃんとできれば、クリックの受け取りはさほど難しくなさそうです。
あーすまん ツールバーと勘違いしてた
>>216 http://msdn.microsoft.com/en-us/library/bb688195 (VS.85).aspx
これの「Drawing in the Extended Frame Window」のところ。
DWM (Aero)環境下で、ウィンドウ全体をクライアント領域にするという方法がある。
これで、ウィンドウ全体を好きに描画できるようになる。
引き替えに、WM_NCHITTESTを自分で処理しなければいけないのが面倒。
その記事にもあるように、MS Office 2007も
これを使ってタイトルバー部分に食い込んで描画している。
GDI製のボーダーを持たないWindow(ガクブチ)を作って 独自のボーダー(ボタン付き)にする。 クライアント領域は下のウィンドウをそのまま 書く。(Timerで定期的に下のウィンドウの更新を チェック。自分のウィンドウに来たメッセージは 下のWindowに当然SEND) この方法ってWindowが動いた時とかサイズが変わった 時、ちょっとみっともないこともなくもないけど 手軽でイくね?(もちょっとイイ小技もあるらしいが)
>>222 おおっ! これぞドンピシャ!
しかし紹介いただいたサンプルを動かしてみてるところですが、
挙動が摩訶不思議でまだ大意がつかめてません。
(特にウィンドウメニューと組み合わせると……)
コードだけじゃなくて記事本文も読まないといけないみたい。
でもこの延長線上でなんとかなりそうです。フレームの挙動がちゃんと変わってるし。
>>223 そういう方法もありだとは思います。GOMプレーヤーとかスキンを活用する系統では
そちらの方が逆にスマートかもしれないし。
でも面倒くさそう……。
今予定してるのはボタンを1個追加するだけなので。
225 :
デフォルトの名無しさん :2010/02/20(土) 12:28:03
全角文字の1バイト目かどうかを判断するAPIを教えてください
文字コードは?
CharNext(p) - p >= 2
228 :
デフォルトの名無しさん :2010/02/20(土) 13:09:47
しふとJISですぅ
S-JISなんてAPIいらねーだろ 半角はアスキーコード互換、全角用もアスキーコードの空き部分の コードを利用してるだけなんだし
IsDBCSLeadByte IsDBCSLeadByteEx
231 :
デフォルトの名無しさん :2010/02/20(土) 13:41:37
複素数を表現するクラスMultiElemNumを作りました。 APIでは、どうするのです。か
何をどう答えればよいのです。か
単語「API」の用例と あとは・・正しい日本語の使い方日本語をお願いします。
235 :
デフォルトの名無しさん :2010/02/20(土) 16:58:41
>>232 MultiElemNumが英語になっていない。Complexが正しい。
printfだって英語になってないがな もしかして「適切な訳語」のことを言いたかったのか
わかってるんなら、わざわざ聞くなよ。
開き直ってその態度。笑っちゃうね。笑わないけど。
何言ってんだ。
条件反射的に一言多いというかなんとうか そういう人間がそうそう近い時間に複数来るってのは無いしな
何言ってんの
条件反射的に一言多いというかなんというか そういう人間がそうそう近い時に複数来るってのは無いしな
>>245 いや、「開き直って」とか言われたから、何考えてるんだろうと思って、241のレスしただけのこと。
248 :
デフォルトの名無しさん :2010/02/20(土) 18:53:22
ではやはり上げておくべきですね。
いいからAPI出せや
APIを出す話だったのか
ふぁびょおおおおってんなよ
A・P・I!A・P・I!
次世代型匂い付きAPI
>>249 そういうのはID出る板でスレ立ててやれ
ここじゃ一生apiなんて出ないぞ
↑ちなみにこれは「IDに〜〜を出す」系のスレに掛けている
261 :
デフォルトの名無しさん :2010/02/21(日) 05:28:41
質問です。 LPCWSTR型の文字列を返却する関数を、 TextOut関数で画面に表示すると、文字化けしてしまいます。 問題となっている関数の中身をコピーして、 TextOut関数の存在する関数の中にペーストし、 返却する変数をそのまま表示するようにした場合は、正しく表示されます。 色々試行錯誤しましたが、見当が付かないので教えていただけるとありがたいです。 ---参考 問題の関数--- LPCWSTR get_chart_size(void){ char dataBuff[] = "alphabet0123カタカナひらがな漢字"; wchar_t pwsz[sizeof(dataBuff)*2]; std::locale::global(std::locale("japanese")); MultiByteToWideChar(CP_ACP, 0, dataBuff, strlen(dataBuff)+1, pwsz, sizeof(pwsz)); LPCWSTR Data = pwsz; return Data; }
関数出たら解放されてしまってるんだろう malloc 汁
char dataBuff これはマルチバイト wchar_t pwsz これはワイド文字 文字コードが違う MultiByteToWideChar これはマルチバイトからワイド文字に変換する関数?
>>261 pwszは非静的な局所変数なので、returnした時点で無効になる。
呼ぶ方 wchar_t pwsz[sizeof(dataBuff)*2]; pwsz = get_chart_size(pwsz, sizeof(pwsz)); TextOut(hogehoge); 呼ばれる方 LPCWSTR get_chart_size(wchar_t *pwsz, size_t size){ char dataBuff[] = "alphabet0123カタカナひらがな漢字"; std::locale::global(std::locale("japanese")); MultiByteToWideChar(CP_ACP, 0, dataBuff, strlen(dataBuff)+1, pwsz, size); return (LPCWSTR)pwsz; }
というか、char、wchar、TCHARはちゃんと区別しようね。みんな。
/| |/__ ヽ| l l│<ハーイ ┷┷┷
間違えた、wchar_tだった
270 :
デフォルトの名無しさん :2010/02/21(日) 13:01:11
以下のような例で、vdCreateToolBar(VOID) と hdCreateToolBar(HWND hwndParent) とで 関数の中身は全く同一で、親ウィンドウのハンドルにグローバル変数を使うのと、関数の 引数を使うのとでは、作成されるツールバーの表示が (1) と (2) で異なるのですが、 なぜでしょうか??? HWND g_hMain; WinMain() { HWND hMain; hMain = CreateWindowEX(); g_hMain = hMain; vdCreateToolBar();-------------------(1) hdCreateToolBar(hMain);--------------(2) … } vdCreateToolBar(VOID) { g_hMain; グローバル変数でツールバー作成 (1) } hdCreateToolBar(HWND hwndParent) { hwndParent; 引数を使ってツールバー作成 (2) }
ちなみに、vdCreateToolBar(VOID) と hdCreateToolBar(HWND hwndParent) は, WinMain() とは別の C ファイルです。 vdCreateToolBar(VOID) の g_hMain は extern で取得してます。
vdCreateToolBarとhdCreateToolBarの内容が違うから
デバッガで動きを比べてみな。
キャストしたらどうなりますか?APIを教えてくだしあい
extern "C" {} の内か外かで、結果が違ってくるとかありますか?
呼び出し規約の不整合があると、どうなるんでしょう??
なんでキャストがでてくるんだ キャストなんて 「俺(プログラム書いてる人)は型が違うのわかってて書いてる からお前(コンパイラ)は気にしなくていいよ。」と教えてるだけなのに (厳密にはいろいろあるようだが
たまに
>>278 みたいな対して上手くもない例え話を載せてる入門書ってあるよね!(* ゜∀゜)ムッハー!!
>>279 事実そうじゃん
関数の引数でconst char* hogeとかやるけどあれだって
書き換えするようなコードを書かないようにする安全策なだけだし
アセンブラレベルで考えればconst とか知ったことじゃねえって
感じだしなあ
「俺」とか「お前」にご丁寧に括弧書きで想定する対象を書いてるのがダサいねぇ 人間が読むのに、わざわざキャストしてどうすんの
キャストするAPIがないとか(笑)
>>281 俺は逆で型変換でキャストなしソースのほうが読みにくくて初心者乙だなぁ
コンパイラの警告レベル上げたとたん警告が何百も出てくるとかだせぇってなる
何言ってんだお前
286 :
270 :2010/02/21(日) 17:44:25
270 ですが、xxCreateToolBar() で関数が引数をとる形にすると、グローバル変数でも 引数渡しでも、ツールバーの動作が”不安定?”になります。 原因のヒントだけでも、ないでしょうか…、、、、
知るかハゲ ソースもなんも出さずに。
すべてAPIが悪い
APIが何の略かも知らないくせに
あぴのせいにするな!大抵手落ちは自分にあるんだ!
そうですねWindowsに欠陥があるわけないですね^^
こういうキチガイがマジ多くて困る。
こういうキチガイがマジ多くて困る。
▄▄ ▄▄▄ █ ▄█ ▄██▄▄ ▄▄▄▄▄ ▀▀▀▀▀▀█▄▄▄▄▄ █ ▄█▄▄▄▄ ▀ █ ▀▀▀▀▀▀ █ █ █▄ █ ▀▀▀▀ ▀▀▀█▀▀▀ █ █▄ █ ▄█ █▀▀█ █ █▄ ▀▀▀ ▀▀▀ ▀▀▀▀ ▀ ▀▀ ▄▄▄▄▄▄ ▄▄▄ ▀▀▀▀ █▀▀ ▀▀▀▀▀█▀ █ █▀ █ ▀▀█▀ ▀▄ █ █▀▀▀ █ █▄ ▀ █▄▄▄ █ ▄▄▄ ▀▀ ▀ ▀▀▀
vbとhdが何の意味なのかわかればエスパーが出てきてくれるかもしれん、ちょっと気になった
Visual Basic
298 :
デフォルトの名無しさん :2010/02/21(日) 18:23:23
あげとくよー
あげた途端レスストップとかw
一通り語り終わった後に上げるのが悪い
VerticalとHorizontalだろ……常考
302 :
デフォルトの名無しさん :2010/02/22(月) 09:48:55
p
GDI+でアルファ値を含むbmpファイルをロードして描画すると 透明になるべき部分が真っ黒になってしまいます。 Image::GetPixelFormat()でARGBではなくRGB形式となってました。 LoadImageで読み込んだ後、GetObjectで生データを取り出して ARGB形式での生成も試したのですが 生成はできたもの描画ができない状態です。 LoadImageとAlphaBlendではうまくできたのですが‥‥ GDI+でアルファ値のbmpは駄目なのでしょうか?
bmpの32bitはそもそもリザーブになってるはず 本気でアルファを考えるならpngを読ませないとだめなんじゃないの?
>bmpの32bitはそもそもリザーブになってるはず bmpの32bitのアルファにあたる部分はそもそもリザーブになってるはず
>>303 そもそもARGBなフォーマットがBITMAP形式では定義されてない。
ビットマップにアルファは仕様外って事でしょうか。 ヘッダをBITMAPV4HEADERにしてもGDI+では駄目でした。 LoadImage/AlphaBlendを使うか、GDI+/pngで行く事にします。
BITMAPがアルファをサポートしたとか聞いたことないしなあ vistaとか7のペイントは知らんけど、xpのペイントはアルファをきっちり潰してくれるしな・・・ そういう状況を見るとサポートしてないと考えるしかないだろ それにpngがあるんだしわざわざbmpがサポートする必要もないしな
一般的な画像で透明度を持ってるのってgifかpngだけだろ。 ビットマップの場合は「この色だけ描画しない」って指定してやって、 画像側ではなくアプリケーション側で透明度を調節するタイプじゃね?
>>309 カラーキーは別に後でも指定できるはずだよ
一時期のゲームなのどでは原色の緑をカラーキーに使ったりしてたはず
311 :
デフォルトの名無しさん :2010/02/23(火) 11:23:12
フォームを最善面に表示するAPIを教えてください
312 :
デフォルトの名無しさん :2010/02/23(火) 11:36:55
もういいです役に立たないクズ共だなあ
フォームを最善面に表示するAPIを教えてくださいを解決するAPI つ ぐぐれカス
314 :
デフォルトの名無しさん :2010/02/23(火) 12:34:41
レス乞食乙
GDIにおけるビットマップの扱いがWin3.1の頃と変わってないんですね‥‥ ペイントが出力するファイルもWin3.1のビットマップ形式でした。 BITMAPV4HEADER.bV4AlphaMask BITMAPV5HEADER.bV5AlphaMask Win9xの時からこういうのがあったもんで、てっきりOKかと思ってました。 腑に落ちなかったので、あれからいろいろ試していましたが 自前でbmpファイルを読み込み、生データをARGB形式として 直接GDI+に食わす方法が一番でした。
>>317 別にそれでいいというのなら止めはしないけど、
正しい方法が分かってるなら正しい方法を採った方がいいよ。
BITMAPがARGBを正式にサポートしてないことには変わりがないので、
TIFFやPNGなど正式にサポートしている画像形式を使うのがこの場合は正しい。
最初にも言ったけど、動けばいい、という態度なら止めはしない。
>>317 そもそもビットマップ形式自体が変化してないからでは?
そこが変わっちゃうと互換性問題が強く出る気がする。
それが指してるアルファマスクって、二値の情報で黒いところだけマスクする奴じゃね?
>>319 >The high byte in each DWORD is not used.
これどういう意味
>>319 32bitの色情報を格納する構造体RGBQUADを調べてみるといいよ
ヘッダにアルファの文字があっても多分古い規格のカラーキーについてだと思うよ
pngのような最大で1バイトまるまるアルファとかはサポートしてないはず
あと
>>317 もpng使えっていわれてるのになんで自前でbmp読み込むことにこだわる
pngだって所定のデコード処理を施せばメモリ上に置かれてるのはbmpと同等だよ
1ピクセル64bitとか誰が要求してんだ
別に叩かれてるわけでもないのに
>>319 がふるぼっこすぎる
叩かれてないならいいじゃねえか
>>325 なんか業界団体はRGBで96bit目指してるらしいけど…。
そんな細かくグラデーションしてどうすんだよ
普通ならいらないけど、B/Wな画像(レントゲンとかCTとか)では実質1/3になっちゃうんで、 そういう分野では必要なのかも。
モノクロ環境は考えてなかったな なるほどな
>>284 キャストを全然つけなくてちょいちょい泣いてるのが初心者
泣きたくないのでキャストつけまくるのがトラウマを抱えた初心者
大人になれば必要なとこだけキャストをつけるようになるよ
複数のダイアログを使いたいんだけど 1つのダイアログごとにプロシージャを別にすることは出来ないの?
335 :
デフォルトの名無しさん :2010/02/24(水) 10:19:03
自分のPCに入ってるSNMPの指定オブジェクトIDに値を書くAPIを教えてください。。
URLエンコード用のAPIってありますか?
>>335 SnmpSetVb
>>336 UrlEscape
ここに書き込むより自分で探した方が早いはず
>>330 本当にモノクロなら
16bitでは重複が許されないが
32bitのBI_BITFIELDSならRedMaskとGreenMaskとBlueMaskに同じ値をセットするだけで規格上は問題ないはずなのだが
DDSでやるとか
3時間程度でwin32apiが使えるようになるサイト教えてください。 当方VB.NETが使えます。
343 :
デフォルトの名無しさん :2010/02/24(水) 14:12:38
>>337 ありがとうございます。
SnmpSetVbはwsnmp32.dllを使うみたいでこのdllは発見したのですが
これのヘッダーファイルはどこにあるのでしょうか?
ファイル名聞いてるの? そのものズバリWinSnmp.hだよ、PlatformSDKのディレクトリにあるよ
msdnみればわかる事を聞くな。
>>344 ありがとうございます。
C++Builderを使っているのですが、WinSnmp.hを発見しました。
libは発見済みだったのでこれでリンクもできます。
すみません、最後にSnmpSetVbとかの関数の使い方を書いてるサイトありますか?
初期化とか使うまでの一連の流れというか・・・
どうしても見つからない場合はSourceForgeあたりでコードを漁る
何真面目に答えてんだカス
そしてGPL汚染と
>>337 で、自分で探せば?といわれるが、懲りずに質問をし
>>346 で、msdnみなよ、といわれ、懲りずに質問をし
>>348 で、msdnへのリンクを貼られた
>>335 は次に英語がよく分からないです。一連の流れのサンプルはないですか?と聞く。
353 :
デフォルトの名無しさん :2010/02/24(水) 17:52:01
あれwwwwwwwwwwwwwww
ここって質問スレだよなwwwwwwwwwwwwww
よく
>>352 みたいなクズが沸くけどなんだろうなw
つーかもうこのスレいらなくね?
誰かが質問したらググれしか言わない奴が張り付いてるし
珍しく誰かが答えたら基地外が沸くしw
質問スレって宿題スレだったのか
355 :
デフォルトの名無しさん :2010/02/24(水) 17:54:35
こんなレスしたら今度は俺が
>>335 だって基地外に言われるんだよなww
このスレも酷くなったもんだよなあ
>>353 そんなこといったら2ちゃんがいらないってことになる
実際いらないけどw
まぁ粘着だろうな、このスレも人に恨まれる程になったとw 人生無駄に削ってくれとしか言えんな( ´ω`)
358 :
デフォルトの名無しさん :2010/02/24(水) 19:25:12
windows 7 Home premium x64 Visual C++ 2008 Express Edition アクティブソリューションプラットフォーム: Win32 で作業しています。 実行中のプロセスが WOW64 か Native64 かを判定しようと 以下のように記述しましたが、kernel32.dll 内に GetNativeSystemInfo 関数が無いと いう結果になってしまいます。 typedef void (WINAPI *FPGETNATIVESYSTEMINFO)(LPSYSTEM_INFO lpSystemInfo); FPGETNATIVESYSTEMINFO GetNativeSystemInfo = (FPGETNATIVESYSTEMINFO)GetProcAddress( GetModuleHandle(TEXT("karnel32.dll")), "GetNativeSystemInfo"); if (GetNativeSystemInfo != NULL) { GetNativeSystemInfo(&systemInfo); } else { GetSystemInfo(&systemInfo); <--- デバッグすると、こちらに入ります } win7なのに GetNativeSystemInfo関数が使えないのは どうしてなのでしょうか?ご教授お願いいたします。
GetModuleHandleが失敗してるだろそのコード
360 :
358 :2010/02/24(水) 19:36:11
>>359 ありがとうございます。
GetModuleHandleのエラー情報を取得する関数を調べる過程で、
kernel32.dll と karnel32.dll を見間違えていたことが分かりました。
GetModuleHandle(TEXT("kernel32.dll")) と修正したところ、
WOW64判定ができました。
簡単なミスでお恥ずかしいです。失礼します。
ウィンドウスタイル"EDIT"のウィンドウをfor文で10個一気に作ろうとすると 処理が間に合わずプログラムが「応答なし」になるのですが、どうにか出来ませんか?
>>362 すみません、自己解決しました
スレ汚し本当に申し訳ないです
>>353 MSDNのSnmpSetVbについてのページが見つからないので教えてください
>>365 ありがとうございます。
がんばって読んでるのですが、難しいです。日本語のコメント付き使用例などはないのでしょうか。。
もう日本の公用語英語にするしかねえな
The high byte in each DWORD is not used. が読めない人のいるスレだからしょうがない。
なんという。
>>353 が変なこと書くから回答してもらえると思っちゃったんじゃないか?
英語ができない奴はなでしこでもやってればいいと思うよ
>>366 自己レス。SetThreadDesktop() が 170 で失敗してました。
ググって見ると、呼び出し元スレッドにウィンドウとかが存在するときは失敗するそうで。
前にうまくいったのは、コンソールアプリだったのを忘れてました・・・。
>>370 その記述がBI_RGBの場合だけという事を理解できない人のいるスレだからしょうがない
GetOpenFileName関数でコモンダイアログを用いた処理で、 ファイルを選択後、「開く(O)」ボタンを押した時、 そのファイルを判定し、有効ならばそのままダイアログを閉じ、 無効ならば、再度ファイルを促したいと思っています。 OFN_ENABLEHOOKを利用してフックし、WM_NOTIFYメッセージの時、 lpOfNotify->hdr.code == CDN_FILEOKの時に判定することまでは出来ました。 ここで、無効なファイルだった場合はCDN_FILEOKをキャンセルし、 「開く(O)」ボタンを押す前の状態に戻りたい場合、 どうするんでしょうか?
ググれかす
!0
WindowsのIEコンポーネントブラウザでドラッグアンドドロップを不許可にしたいんですが なにか良い方法無いでしょうか? DragAcceptFilesで上から順に全部FLASEにしてみましたが、効果ありませんでした。
ぐぐれよぅ
>>381 何時間ぐぐっても見つからないので検索ワードだけでも教えてください。
>>383 どうやらドラッグアンドドロップについての文章じゃないようですね。
ソースコードをじっくり読んでみます。
本来なら数時間ぐぐっただけでぐぐった気になるのは 許せないところだけどな。 俺なんて目から血が出るくらいぐぐるからな。
そのまま死ねばいいのにね
はい
ここはもう機能してないスレだから他行った方が良いよ
D&Dもイベントが発生するけどイベント処理ロジックがなかったら何もおきない・・・ってことはないのかな?
registerasdroptarget
MN_GETHMENUは、何故MN_から始まってるんでしょう。
Menu Notify
何も思わずMeNuだと思っていたが、それならMMのほうがよくね?って話かな
わかりました。
396 :
デフォルトの名無しさん :2010/02/27(土) 04:00:07
MessageBoxについて質問します。 タスクマネージャーを監視しているとMessageBoxを呼び出すごとにGDIオブジェクトが増えているのですが、 これはいったいなぜでしょうか? MessageBoxを呼び出して、たとえばMB_OKでOKを押させて消させた場合もGDIオブジェクトの数が減ることがありません。 非常に気になるので、MessageBoxを呼び出しおわったあとにGDIオブジェクトをクローズする方法を教えてもらえませんか?
ソース
しょうゆ
ソース
しーそー
ソース
まぁMessageBox以外を疑うべきでは?Box出さないでウィンドウサイズ変更とかグリグリしながら監視推奨
CreateDialogで作ったダイアログ内のコンボボックスに 項目を追加するにはWM_INITDIALOG内で SendDlgItemMessage(hDlg, コンボボックスの識別子, CB_ADDSTRING , 0 , (LPARAM)"text"); これでいいんだよな? 何も起こらないんだけど
同じコードでやって、それがリストボックス(LB_ADDSTRING)で動くなら コンボボックスでもいけると思うが まさかF4キーでドロップダウンしてないってオチじゃないよね
リストボックスは出来た コンボは追加されてないっぽい
コンボボックスの高さが足りてないオチは?
実際に追加されていないのか、単に表示がされないのか切り分けだな。 あとはSendMessageで試すとか
408 :
デフォルトの名無しさん :2010/03/01(月) 05:39:41
リソースエディッタで作ったダイアログを トップレベルウィンドウとして扱うことって出来ないんでしょうか?
>>408 WinMain以下でいきなりダイアログを開けば勝手にトップレベルウィンドウになると思うが?
教師をしているんだが、生徒が勝手に他人の文書をコピペできない ようにクリップボードを定期的にクリアするサービスアプリケーション を作ってるんだがどのようにすればいいか教えてくれないかい? サイズが0のウィンドウを開いてタイマーを1秒に 設定して、1秒ごとにEmptyClipBoadを発行するものを 作ったんだが、タスクバーで右クリックすれば終了できて しまうんだ。タスクバーにアプリケーション名を出さずに 実行するのはどのようにすればいい?
>>410 そんなアプリを生徒に強制的に使わせるのはヤメレ。
>>410 悪意無しで本当にコピペしたいって時はどうさせるのですか先生
教師が考えそうな低俗で下劣なアプリだな
415 :
410 :2010/03/01(月) 06:45:04
>>412 自前のクリップボードビューワーのついたテキストエディターも
作ってみようとと思ってる。タブ方式とする予定。
他の文書でマウスで一部をハイライト状態にすると、
自動的にビューワーのほうに転送されるようにしてあげる。
それを見ながら、手打ちするわけだ。タブを切り替えたり
スクロールさせなくていいわけだ。優しいだろ?
このトランスクリプトモードに入ったら、それまで入力された
箇所の不用意な変更を防止してあげる。そして
ビューワーの文字列を端から順番通りちゃんとミスタッチ無く
入力できるようにしてあげる予定(ミスタッチしたらBSを
入力したのと同じ効果にしてあげるとか)
そこらにあるクリップボード支援ツール使われて即死と見た
>>415 そんな最上級のウザソフト作って何がしたいの?w
418 :
410 :2010/03/01(月) 06:54:04
で、タスクバーに表示させない方法は知ってるかい?
何が目的か分からんが、PC使う以上はコピペは推奨すべき。 タイピングさせたいならタイピングオブザデッドでも買い与えてやれ。
馬鹿のオナニーに付き合わされて、本当に貴重な10代での学習機会を棒に振られる生徒が可哀想・・・
教師がこんな無知なわけないだろ 素直にウィルス作ってますと言えよ
こんな無知が担当の生徒が可哀想。
Adomin権限で実行すれば一般権限のユーザーからは見れないぞ。 まさか生徒にAdomin権限使わせてるってことはないだろう?さすがに。 使わせてるとしたらバカ教師クオリティ。
adominって何すか? 中学生かお前
もう許してください
コピペした時にクリップボードの内容を生徒別にリストする方がいいんでないの どこで(URLとかPathとか)コピーしてどこへペーストしたかって
427 :
410 :2010/03/01(月) 07:56:24
要するにここの人は貴重な10代での学習機会を 貧弱なソフト環境だったWin9xとかで棒に振られた 可哀想な世代だってことですね。 理解できました。 どうも傷ついてしまったようですみません。 訊いたのが間違いでした。
2時間掛けてようやく気付いたのか馬鹿
いいえ、パンチカード世代です
こんな無能の自称教師にオナニー環境押し付けられるくらいなら 黒板にググレカスとだけ書いて自習させた方が遥かに有意義だわな
>>427 この簡単に答えられる質問を、誰にも答えてもらえない
お前さん人に物を教える前に、人に物を教えてもらう方法を学ぶべきじゃないか?w
おい、電車下りる時間。
ユトリが教師になると碌なことが無いという良い見本だな。
いつの時代も馬鹿はいるもんだ
だがしかし もう世の中には ゆとりの教師かゆとりを育てた教師しかいないという絶望感
非クライアント領域を自分好みに変形させることってどうやったらできます?
無理です
EmptyClipBoad じゃなくて EmptyClipboard だろ
教師をしているんだが EmptyClipBoad
”ウィンドウが最大化されるとき”は、どうやって知ればよいのでしょうか?
WM_SHOWWINDOW
すいません、、、聞き方が悪かったのですが、 アプリ・ウィンドウを最大化状態で起動したとき、右上の”Resize”ボタン?を 押したときに、前回アプリ実行時のリサイズ状態に戻したいのですが、どうすれば よいのでしょ〜か?
SetWindowPlacement GetWindowPlacement
446 :
444 :2010/03/01(月) 19:47:43
なるほど、、、同じような名前でわけ分かりませんでしたが、そういう意味だったのか、 と納得しました。
WM_SYSCOMMANDの(wParam & 0xfff0) == SC_MAXIMIZE このタイミングで最大化する前のウィンドウサイズを保持して 次回起動後、SC_RESTOREが来たら保存したサイズにリサイズすればいいかと
448 :
デフォルトの名無しさん :2010/03/03(水) 05:07:10
非アクティブ状態でもキー入力を受け付けるには?
フック、ホットキー
WINDOWS終了時に、ファイルに設定を保存する時って 直接そのファイルに書きこむのと、一度適当なファイル作って書き込み それを本来のファイルにリネームするのでは、どちらが良い?
正しいのは書き換え 大昔の容量比の名残りでMS謹製ソフトでもオリジナルをリネーム後に新規作成してるのがあるけど
453 :
デフォルトの名無しさん :2010/03/03(水) 10:12:15
>>449 ホットキーというのを試して成功したけど
入力が無効化されてしまうのはどうにかできないの?
>>453 非アクティブなプロセスにどんな処理させてるのかによる
単一キーじゃなくてもいいなら普段使わないキーの組み合わせで回避したらどうかな
MODあたり使って
Raw Input RIDEV_INPUTSINK
456 :
デフォルトの名無しさん :2010/03/03(水) 23:33:01
PeekMessage()やGetMessage()の第二引数って、ウィンドウハンドルを渡すんだよね。 MSG::messageの中にWM_QUITが来てた時に、メッセージループから抜けようとしたんだけど、 メインウィンドウのハンドルを引数にしてたら、なぜか×ボタンとか押したとき(WM_CLOSEやWM_DESTROYでPostQuitMessage()を呼ぶようにしてる) プログラムが終了しないんだけど、第二引数にNULLを与えたらうまくいくんだけど…。 NULLを与えても大丈夫なの? 全てのメッセージを取得するようになると勝手に思ってるんだけど…。
日本語のでいいからMSDN嫁カス
>PeekMessage()やGetMessage()の第二引数って、ウィンドウハンドルを渡すんだよね。 ダウト。普通はNULLにする。 ウィンドウハンドルを指定したらそのウィンドウへのメッセージしか取れないだろ。 子ウィンドウ作る場合とかどうすんだ。 そもそもお前の場合GetMessageでWM_QUITを取得しようとした時点で WM_DESTROY実行済みでウィンドウが無効になってるから失敗して当然。 勝手に思い込む前に頭のバグ直しとけ。
なにこのひとこわい
460 :
デフォルトの名無しさん :2010/03/04(木) 00:30:47
>>458 了解。
Win32APIを学ぶために読んだページにウィンドウハンドルを渡すって書いてあったから、鵜呑みにしてた。申し訳ない。
↑どうしても書き込みたくて仕方がなかった
↑うん
XPでExplorerをアイコン表示にした時、ファイルの位置を自由に変えられますが あの位置情報をファイルの絶対パスなどから取得するのはどうすればいいんでしょうか。
IShellFolderインターフェイスを使うんだろうなぁ
IFolderView:GetItemPosition
質問です。 アプリの二重起動を防止したいと考えています。 それだけならMutexを使うだけなのですが、コマンドライン引数を 最初に起動したアプリに渡した後で、終了させたいと思ってます。 (最初に起動したアプリは常駐し、以後は常駐アプリにのみ処理させたい) このような場合に、データ(コマンドライン引数)の受け渡しを 行うには、どのような機能/APIを使うべきでしょうか?
そのプログラムがスレッド持ってるならPostしとけばいいのではないですか
それとグローバルアトム。
VirtualAllocExとか
ファイルマッピングオブジェクト使うのはどうかな
CreateProcessでexeを起動する処理を含むプログラムを作ったのですが、 自分のPCではちゃんと動くのに、知り合いのPCでは動かないみたいです。 呼び出されるexeの内部でファイルを書き出す処理をしているのですが、 ファイルが書き出されないようなので、CreateProcessの部分が原因ではないかと思っています。 またexeを直接起動したときの動作は問題ないようです。 自分のPCでは再現しないので、環境による影響があるのではないかと疑っているのですが、 環境によってCreateProcessがうまく動かないということは考えられるでしょうか? 自分のPCはWin7、知り合いのPCはWinXPです。
Roming関係とか考えられること多すぎて困る
そんな漠然とした情報じゃ何もわからん。 OutputDebugStringやログ吐きまくってどのAPIがどんなエラーコードで失敗しているかを根性で調査するしか。
CPUの温度とか湿度とかメモリ周りBIOS設定を確かめてみて あとCPUクーラーは良く利いているかな?クーラーは 消耗品や劣化する製品なので、メンテは必須だよん 他人が作ったアプリやOSが動作しない時は意外にありがち なのがそういった問題
ドライブ文字ベタ書きとかそんなオチだろうさ
Win7で有効な構造体のメンバがXPではリザーブとか。
>>473-475 いろいろ原因は考えられるんですね。
自分のPCでは再現しないので、デバッグもしづらいのがつらいところです。
>>476 exeのファイル名指定は相対パスで書いてあります。
>>477 CreateProcessの部分はネットで調べて書いたのですが、Win7発売より古い情報なので、それもなさそうです。
知り合いに協力してもらいながら調査してみます。
どうもでした。
あるアプリを複数起動させ、それぞれの保存ダイアログを同時に表示させた 時にどのダイアログがどのアプリのものか外部アプリから識別する方法って 有りますか?
コモンダイアログだって呼び出し元スレッドとプロセスに所属してるんだからその辺紐付ければ取れるでしょうよ
こんな時間に有り難うございます。 複数起動したアプリのハンドルは区別できてるんですけど、 例えば1番目に起動したハンドルで保存ダイアログを探して、 外部アプリから操作しようとすると、2番目に起動したアプリの 保存ダイアログにメッセージが飛ぶ現象が起きてしまってどうしたもんかと。
Windowをスクリーンの中央に表示するコードをください、この私に。
>>481 オーナーウインドウを調べれば分からない?
確かHWNDからプロセスIDは調べられたと思うんだけど。
486 :
479 :2010/03/05(金) 11:21:04
皆さん、有り難うございました。 FindWindowExで調べていたからまずかったみたいです。 Owner,Ownerdを調べていったら出来ました。 ダイアログと親ウィンドウの関係が今回のことで分かりました。 また、よろしくお願いします。
487 :
デフォルトの名無しさん :2010/03/05(金) 17:40:26
bitmapをjpgに変換するAPI教えて
489 :
467 :2010/03/05(金) 22:27:15
お返事ありがとうございます。
>>468 すみません、理解できませんでした。
スレッドを利用したプロセス間でのデータ受け渡しがあるのでしょうか??
>>469 >>470 >>471 最初のアプリが常駐した後、同時に複数の同アプリが起動した場合でも
うまくいくような仕掛け(排他制御)を考える必要がありそうですね。
単に既に起動しているプロセスに対して コマンドライン引数をSendすればいいだけじゃだめなの?
WM_COPYDATAで十分そうだな。 後はカレントディレクトリも送っといたほうがいいんじゃないかな。 相対パスくらいはちゃんと扱ってもらわないと。
日本語でOkay.
問題は質問者の書き込みではウィンドウがあるのかどうか分からないことだ
ウィンドウをクラス化するところまでできました。 次にリストビューあたりをクラス化したいと思うのですが、 検索してもなかなかそういうのが見つかりません。 こう作るのがセオリーというのがあれば知りたいのですが、 参考になるサイトやソースコードがあれば教えて欲しいです。 特に、ウィンドウプロシージャとのやりとりが煩雑なので それをクラスにまとめる方法が知りたいです。 よろしくお願いします。
クラスにまとめるほうが煩雑になるの法則
WTLとかのコード見て見れば 俺は見たときないけど
497 :
494 :2010/03/06(土) 03:13:33
やはりWTLになりますか。評判はいいのですが、解析となると気が引けて しまって。手っ取り早く説明しているところがあればなと思って質問しました。 やっぱりこういうのは自作するよりも利用するものなんですかね。
サブクラス化で検索したら
499 :
494 :2010/03/06(土) 03:36:51
サブクラス化はコントロール自体の機能を拡張するために使う手法という理解でいました。 そうではなくて、メインからコントロールを利用しやすくするためにクラス化 したかったのです。サブクラス化することでそういうメリットが得られるのでしょうか?
clistviewctrl
一番わかってないのは、自分が何をしたいのかだろう
誰もが一度は通る道
私のクラスは53万です。
MFCとかWinFormsとかWPFをパクる
505 :
デフォルトの名無しさん :2010/03/06(土) 17:28:13
>>488 ありがとうございます。
当方C++Builder2007を使っていて、それ用のヘッダ当ありますが
エラーが出まくってまともにコンパイルができませんでした・・・
とあるアプリを外部から操作するアプリを作成して一応望み通りに作れたのですが、 コンボボックスのことで教えて欲しいことがあって来ました。 CB_SETCURSELでアイテムを選択すると思うのですが、このAPIでアイテムを選択しても 一旦は切り替わるのですが、その後必ず先頭のアイテムが選択されてしまい、アイテム変更後 クリックメッセージを送ってやると選択したアイテムで処理が進んでくれるということになって しまいました。 これって、使っているAPIが悪いのでしょうか? それとも、操作しようとしているアプリの作り方(仕様?)の問題でどうしようもないことなのでしょうか? よろしくお願いします
507 :
494 :2010/03/06(土) 23:35:15
皆さんありがとうございます。こういうのは定番の手法が確立されているか と思ったのですが、意外とそうでもないようで。 とりあえずWTLやMFCとかの定番ライブラリのソースを調べてみることにします。
EnumProcesModules→GetModuleFileNameExでファイル名を取得したいのですが 64bitアプリケーションに対してEnumProcessModulesしてもうまく取得できずGetModuleFileNameExが失敗してしまいます 何が原因なんでしょうか?
このスレの人はそんな難しい質問には答えられないの
32/64 で別管理なんじゃね?
64bitビルドだと失敗しない
HANDLEの大きさが違うからでしょ
513 :
508 :2010/03/07(日) 17:14:22
ありがとうございます 32bitでは64bitアプリケーションに対して一部の操作が無効なんですね・・
HANDLEが別物なんだから当たり前やが
UNICODE でプログラミングしてるのですが、ある関数の終了と同時に異常終了してしまいます。 以下の部分が怪しいのですが、勘違いしてないでしょうか、、、(Borland C++) LOGFONT logfont; const TCHAR *facename = _T("MS ゴシック"); _tmemset(&logfont,0,sizeof(LOGFONT)); _tmemcpy(&logfont.lfFaceName,facename,_tcslen(facename)*sizeof(TCHAR)); _tmemcpy(&save.logfont,&logfont,sizeof(LOGFONT));
デバッガで追跡した? _tmemset(&logfont,0,sizeof(LOGFONT)); memset( &logfont,0,sizeof(LOGFONT)); これってどう違うの?UNICODEに合わせて用意された関数? それと _tmemcpy(&logfont.lfFaceName,facename,_tcslen(facename)*sizeof(TCHAR)); ここで、logfont.ltFaceNameのアドレスを渡してる logfont.ltFaceNameは配列なので 正しくは _tmemcpy(logfont.lfFaceName,facename,_tcslen(facename)*sizeof(TCHAR));
こっちでもおk _tmemcpy(&logfont.lfFaceName[0],facename,_tcslen(facename)*sizeof(TCHAR)); 只の勘違いだろうけど、ポインタ周りを理解してないうちはUNICODEは控えた方が
CRTとか… LOGFONT logfont; ::SecureZeroMemory( &logfont, sizeof( logfont ) ); ::lstrcpy( logfont.lfFaceName, _T("MS ゴシック") );
SecureZeroMemoryはコンパイラの最適化を受けずに、確実にゼロクリアされるけど memsetでゼロクリアって確実にされないの?
今日の1行 LOGFONT logfont = {0};
WaitForSingleObject()ついて質問があります。
パイプを使用してアプリ間で双方向通信を行うプログラムを作成しています。
http://www.kumei.ne.jp/c_lang/sdk3/sdk_248.htm これを参考にしています。
アプリ間で共有しているイベントオブジェクトを使用してパイプへの書き込み読込みの排他処理を行っています。
正常に動作している場合は問題はないのですが、
仮に片方がアボートした場合、もう片方のアプリのWaitForSingleObject()から帰ってきません
これを回避する方法はあるでしょうか?
>>512 ・片方がアボートした段階で管理者に連絡する
・タイムアウト処理を実装する
未処理例外キャチとかでアボートする前にイベント発行とかで通知 1つでもシグナル状態になったら制御を返すWaitForMultipleObject()を使用する
GUI操作された処理で、それらの実行/終了した事を知るにはどうしたらいいですか?
GUI操作の質問は、521-524と同じ質問なのかな?
>>524 のレスの通り、CreateEventでイベントオブジェクトを作成する。
なお、CreateEventの第一引数の名前をユニークなものとし、
両方のアプリで認識できる事とする。
あとは、プロセスが終了する段階でSetEventを指定すれば、
待ち合わせ側でもWaitForMultipleObjectで知る事ができる。
521-524以外なら、WM_KILLFOCUSが操作を終了したヒントの一つなのでは?
※但し、コントロールによってはCBN_SELCHANGEなどもあり、
一概とはいえない。
527 :
521 :2010/03/08(月) 18:01:35
>>523 , 524
返信ありがとうございます。
アボートする前にイベント発行の方法で考えてみます。
パイプの双方向通信て微妙に難しくありませんか?
今まで、送信と受信の2本のパイプで双方向通信してましたが、どうもスマートに見えないので
改良しましたが、今度はイベントの開放時に下手するとWaitForMultipleObject()でとまりますね・・・
なにか、いいオープンソースあったら教えてほしい・・・
>>526 521-524とは異なる質問です
バッチ処理を行うアプリを作りたいのですが
例えばGUIアプリの、AアプリとBアプリがあるとし
Aアプリで処理を実行し、終了ー>その後にBアプリを実行させたいと思っています
アプリ自体は、作者が異なる者を想定していますので、イベント名などは合わせることは出来ません
この状態で対応出来ますか?
エスパー
>>521 >仮に片方がアボートした場合、もう片方のアプリのWaitForSingleObject()から帰ってきません
嘘書くな。
そもそもpipeの読み書きに排他処理は不要。
>>528 まずは、Spy++でトレースして考えたほうがよいかと
あるウィンドウが別のウィンドウの子孫かどうかを一発で判定するAPIは無いのでしょうか? 深い親子階層を持つウィンドウの中で、 フォーカスを持つウィンドウが自分の子孫に含まれているかを判定したいのですが。
534 :
533 :2010/03/08(月) 19:27:53
IsChild()で子だけでなく子孫も判定できるようでした。失礼しました。
535 :
デフォルトの名無しさん :2010/03/08(月) 19:36:01
CreateWindowでコンボボックスを作ったんだけど、枠線消す方法誰か知ってる?
WS_EX_STATICEDGE, WS_EX_CLIENTEDGE, WS_EX_WINDOWEDGE 該当するフラグをマスクでアンド演算してね
537 :
521 :2010/03/08(月) 20:08:09
いろいろと返信ありがとうございます。
525とは別人です。
>>531 パイプによるプロセス間通信で双方向通信の場合、
排他処理なしに1本のパイプで行うことは不可能じゃないですか?
以前やってみましたが、自分で書き込んだデータを自分のプロセスが読み込み(ReadFile())ます。
意味が分からん OpenModeをPIPE_ACCESS_DUPLEXにして PeekNamedPipeでスピンロックぐるぐる回してればいいじゃん
540 :
uy ◆e6.oHu1j.o :2010/03/09(火) 02:20:02
post_messageで プロセスAから プロセスBへメッセージを送れるわけですが、 これを受け取りたくない場合ってプロセスBはどうやって作ればいいんですか? させたくないのは、 とにかくプロセスBは、他プロセスからのメッセージを一切受け取りたくない = 自動操作などをさせたくない ってことです。
特定のメッセージだけなら受け取って握りつぶすだけだけど 送信元が判定できないから難しいと思う
つか数日前からプロセス間関連の質問しまくってる人は何をやってるんですか? 宿題?
まぁまぁ、プロセス間通信もできればできたで楽しいし。 リダイレクタにも応用できるし!?
夢はあるね
リソースダイアログを親ウィンドウとして扱うのってあり?
ありかなしか何を基準とすればいいのか分からんよ 確実になしって言えるのは実現できないことだけだ
なしではないけど、どうかと
俺は簡単なアプリ作る時はリソースダイアログにしてる
約800ページもあんのか
プログラム覚えだした頃って外部プログラム操作したくならない? いかにも俺はプログマーだぜって気分が味わえる。
プロだクマー
>>551 別に覚えたてに限らんでしょ。
自分でアプリ作るのは面倒だけど既製品では気に入らない時に
ボタンやダイアログのハンドル調べて自動制御する簡単なソフトを作るのは
みんなやってると思うんだけど。
自分で作るか別のアプリ探すw
メッセージ送ってどうのこうのまではしようと思わないな… パイプ使ってコマンドライン編集するくらいならやるけど
勝手に操作されたくないという気持ちは分からなくもないが、 たとえ、他のプロセスからのメッセージを弾く方法があったとしても、 アクセシビリティAPI経由で操作できてしまうということになるだろうと思う。
SendMessageをフックして弾けばいい
フックをフックして弾けよ
ひどい攻防ですね
キーボードやマウスのふりをするドライバとか…
メッセージ処理前にチューリングテストしよう。
質問お願いします。 デスクトップに直接(文字とか画像とか)描画したいのですが、方法が分かりません。 このキーワードのままググってみて hdc=GetDC(NULL) のhdcを対象に描画する方法は見つけたのですが、これではなくて、 ウィンドウを開いた場合にも最も手前に表示されますが、私がしたいのは 一番奥、つまりデスクトップ背景画像のスグ上に表示させたいんです。 何を使えばいいんでしょうか?
俺も知りたい
ウインドウ列挙して全部クリップしたら
ありがとうございます。それでやってみます。
GetDesktopWindow関数からハンドルを取ってきちゃダメ? そこからDC探って、ビットマップ作成すればいいんじゃね?
GetDC(NULL)はプライマリモニタのDCが 返ってくるから、普通にやると上書きされる
その壁紙のビットマップファイルの複製を作って そこに好きな文字を書く。 レジストリを書き換えて壁紙に設定 これ以上に強力な方法はないだろ
猫にあったな<デスクトップに図形描画
ここはActiveDesktopの出番だな! Windows7で試したら、インスタンスは作れたけどE_NOTIMPLだった。残念。
いやここは俺の出番!!
PCの電源ボタンを押した際のWindowsの終了・スタンバイ・休止のメッセージをフックしてキャンセル(捨てる)することのできる出来るAPIありませんか? SetWindowsHookExでできるんじゃないかと思ったけどなんだか違うみたいで
刮目せよ!! WM_QUERYSESSION WM_ENDSESSION あそうそう、戸田恵梨香ちゃんかわいいよね
>>573 ありがとうございます!
適当にウィンドウ作ってやってみる
Win7なのがちょっと心配
575 :
572 :2010/03/10(水) 23:24:49
ShutdownBlockReasonCreate() WM_QUERYSESSION でシャットダウン・ログオフをキャンセルさせることはできたのですが スリープの方がうまくいきません 調べてみたところXPまではスリープ時に送られてくるWM_POWERBROADCAST / PBT_APMQUERYSUSPENDに対して BROADCAST_QUERY_DENYを返すことでスリープ以降をキャンセルできたようなのですが、Vista以降はうまく動作しないようです SetThreadExecutionState(ES_SYSTEM_REQUIRED | ES_CONTINUOUS)も試してみたのですが効果がありませんでした Windows7で同じような処理をする方法はないでしょうか?
576 :
デフォルトの名無しさん :2010/03/10(水) 23:28:44
VBでUSB-シリアル変換ケーブルを使う通信アプリ作ってるんですが、 ポーリングのためにWriteFileするタイミングで ケーブル(USB側)を引っこ抜くとWriteFileが返らぬ人になって困っています。 ポートも握り締めたまま逝ってしまわれるので、どうにも・・。 エラーで良いので戻って欲しいのですが、 どういう方法が一般的なのでしょうか?
スレッドでやれば
579 :
576 :2010/03/11(木) 00:49:23
ありがとうございます。
>>577 戻ってこなければスレッドごと破棄でポートを
手放してくれますかね〜。やってみまつ。
>>578 hmm...OVERWRAPPEDだと処理がすぐに返るんですね!
タイムアウトの処理が難しそうですが挑戦してみます。
こっちの方がシンプルなのかなぁ。
ディレクトリ巡回するコードでリパースポイントやらシンボリックリンクやらで 無限ループに陥るのを防止するコードで何かいいのないですか。 深さかパスの長さに制限つけちゃうのが手っ取り早いとは思いますが厳密とは言い難いです。
そこまで分かってるのにFILE_ATTRIBUTE_REPARSE_POINTに何で目が行かないんだYO
リパースを阻止したいんじゃなくて循環を阻止したいんじゃないか? それならルートからGetFileInformationByHandleを呼び出してVolumeSerialNumberとFileIndexが全て一致しないか調べるくらいしか思いつかない
>>580 一回見た場所を覚えておいて同じところに戻ってきたらそこで枝を打ち切って幹に戻ればよい
オレならディレクトリ情報でハッシュ作って照合する
HDDのバックアップ取るフリーウェアが循環対策してなくてえらい目にあったことならある
/etc に symlink してるアホがいて chmod -Rf 777 /usr/hoge/fuga みたいなことしたら /etc 以下全部 777 になって焦ったことはある あれはなんだったんだろう
そもそもディレクトリを巡回する事自体が間違ってる
rootユーザーでそんなことしなければエラーで止まるだろうに
とりあえず糞OS使ってる奴はスレ違いだから即座に死ぬように
ここはWIN32APIスレだぞ
クソが付くOSはリナクソとOSエックソの二つだけだ
>>575 それ、本当にスリープに移行しているのか?
画面の出力が止まっているだけじゃないか?
>>592 Vista以降はPBT_APMQUERYSUSPENDが省かれている
594 :
デフォルトの名無しさん :2010/03/12(金) 13:44:59
ガ・・ロキー?
>>410 俺ならサービス作ってそっから一定間隔でクリップボードからにするプログラム呼び出すか
クリップボード関連のAPIをフックするかな
これならプログラムがLocal System Accountで動くからすべてのプログラムを制御できる
そしてそれらの努力はOfficeのクリップボード履歴により無に帰すのであった
普通にテストと称して即興で学習内容を絡めた例題を出して作らせればいいじゃない。 宿題なんて所詮はテストの為の予習復習だろ。
他人の文書をコピーする以外にもクリップボードにはいろいろな使い方があるんだが、 それらもすべて封じてしまうのか。 不便じゃのう。
ファイルにキーボード入力履歴を保存したり それを読み取って指定したウィンドウ に送るコントロールを誰か作るだろうから そういうサービスがあってもコピーは横行だろから 効果は薄いだろね。(IMEの自動学習をOffにしないと ならんだろうが)
コピペ禁止って手段が目的になってる気がするな。 本来の目的は、生徒にちゃんと理解させることだと思うんだけど。 それなら結局テストとかで判断できそうなんだけどな。
つーかネットワーク構成で教師のPCと各生徒のPC以外の リンクを禁止させ(IP生徒間では非公開。リブート=ログオン単位に 変化させる)、FDもDVDROMとかも付けない、USBメモリが使えないようにUSB端子をボード上で断線させる(ハンダコテだけで十分できる)キーボードマウスはUSBタイプだがPS/2変換を行う。 教師との通信はクリップボードが使えない専用ソフトで行う。 Windows標準装備も含め不要なアプリケーションは全部外す。 当然インターネットにも繋げない。 教材はすべて画像ファイルにして、専用ビューワーで閲覧させる。 これくらい徹底的にやらないと教育現場じゃ使えないだろ 但し教師のほうも3年は休職して特別訓練を受ける必要は あるだろうが
>>602 教師の方は精神病院で療養を受ける必要があるな
>>602 の言ってる事の半分が無意味と意味不明で構成されてる
PCを媒体とした教育では、教師は、学習作業の進行と 学習データ回収作業に徹し
教師=精神病医師であると同時に精神病患者である これでよくね?
>>602 はドシロウトの妄想だから読んでも無駄
今の学校はもっとスマートに運用してる
生徒の耳に1000Base-T端子が付いてるからそこに ケーブル繋いで...だろw
最近の子供は恵まれてるよ。公立小学校でもサーバルームがある。 学校ごとにドメイン組んで、生徒には個別にアカウントが与えられてる。 権限設定して生徒同士ではファイルがコピーできないようになってる。 USBメモリ対策は企業なんかでやってるのと同じ。 インターネットも普通に使えるし、かなり金と手間をかけてシステム組んでる。 こないだ父兄の見学会に行ってびっくりしてきたとこ。
そりゃ教師だってPCやりたいだろうからなw だがいずれほぼ一生PCに付きまとわれる運命の 星に生まれた現代人にとっては、学校だけはそう でない場所だと願いたいものだぜw
とはいえそういう子供たちは パソコンがプログラミングして使うものだなんて知らずに育つんだろうか
>>611 みたいな時代錯誤のPCアレルギー患者が何故このスレに?
断線に半田ごて・・・だと?
PCアレルギーだからPCの世界に入りPCを批判するも
PCでPC教育せざるを得ない現実を憂う なあんてね
>>614 ハンダを溶かしてポンプで吸い取って一時的にコネクタとか
を機能停止させた経験とかある世代なんてもう40代
後半以降が主流だろな(目的を完全に達することができる
かどうかは回路次第だが)
昔はカッターナイフで基板のパターン削ったり
ICの足を上げたりとかやったっけ
今はたいていのことがソフト的にできるし、学校だと
クライアントが何百台もあるのにハンダゴテとか不可能だし
そんなことしなくてもUSBは殺せるんだし
というわけで、
>>410 はもうちょっとWindowsの
内部の勉強をして別の方法を考えた方がいいと思うよ
クリップボード消されると普通に文章を書くだけでも
推敲もできなくて能率がガタ落ちしそうだわ
>>615 いや、別に20代でもやった事はあるが
PCパーツにポンプで吸えるほどの巨大半田は無い
やるならカッターで削る
そもそも学校はリースだし、業者に注文すれば普通にUSB無しが来る
コピペされたら意味が無いって事はだ その課題そのものに根本的に意味が無いって事だ
複数のユーザーIDを与えて、そのユーザー単位に使えるアプリを 厳格に分離する。アクセス可能なフォルダーも厳しく制限する。 こうすれば安直なクリップボード経由の複製を防げるし 系統の異なるアプリケーション操作を異なるデスクトップで 行うので混乱が少なくて良くね?(XP以降じゃないと別ユーザー の同時ログオンは無理だが) 願わくは、今は廃れたMDIにデストップ全体を表示し 同一画面に複数ユーザーセッションを同時表示することが出来るような 機能がWindowsにあれば良いんだが...
理解不能なことは理解できたみたいだ
無知な素人ほど「ナニカ」を制限したがるんだよなぁ そして穴だらけで意味の無いことばかり言う
一方ソ連はD&Dでファイルをコピーしてメニューの編集→挿入で中身を取り込んだ
>>622 そだね。一つのウィンドウに、スタートメニューとかタスクバーを
表示できるのはただ一つとかね。制限が多いよ
>>619 だから、そういう風にデスクトップが色んな
種類の「個性的な」アプリがおんなじ額縁に
入った状態でごちゃごちゃになってるの見るの
見せるのがヤだという理由でWebアプリが増え
てきてるんだろ?今時のまともな学校だったら
何百台のPCの同時アクセスに堪える凄いスペッ
クのサーバーがフル稼働してるのが普通。
あんまり制限しすぎるとコンピュータの勉強にならない あれもだめこれもだめかなんだPCてつまんないじゃんと思うか それともクラッキング技術に長けてくるかもしれないなw
学校はとにかく「アレもダメ、コレもダメ、ソレもダメ」から入るからな そんだけ制限するからには、一体何をさせてくれるんだ?と思ったら 今配ったプリントを打ち込んでワードファイルにしなさい とか言うボケ老人じみた課題を出してくれる カス教師共は初心者にPCに対する嫌悪感を植え付ける天才だわ
電子データの基本であり最大の特徴である「複製の容易さ」を封じる事から始めるなんて教師失格と言うか、死ねばいいのに
軍隊なんかで一番最悪な上官パターンだよな
EmptyClipBoad.....
端末をthin client クリップボード学校全体共有にして サーバー側で1秒毎に LPCTSTR "否"を クリップボードに注入し続ければイイんじゃないかな
杏マナー杏マナー杏マナー杏マナー杏マナー杏マナー 杏マナー杏マナー杏マナー杏マナー杏マナー杏マナー 杏マナー杏マナー杏マナー杏マナー杏マナー杏マナー ーナマ杏ーナマ杏ーナマ杏ーナマ杏ーナマ杏ーナマ杏 ーナマ杏ーナマ杏ーナマ杏ーナマ杏ーナマ杏ーナマ杏 ーナマ杏ーナマ杏ーナマ杏ーナマ杏ーナマ杏ーナマ杏 杏マナー杏マナー杏マナー杏マナー杏マナー杏マナー 杏マナー杏マナー杏マナー杏マナー杏マナー杏マナー 杏マナー杏マナー杏マナー杏マナー杏マナー杏マナー
>>625 それだけの設備を持っている「今時のまともな学校」って
具体的にはどことどこ?
くだらないからここまでな
お前らのLifeTimeをTerminateすっぞ
あと
>>410 は辞職しろ
だがD&DのOLE経由でコピーできてしまうのであった・・・
>>627 アレもダメ,コレもダメ、ソレもダメというのは
結局不用意な操作や誤操作は、個別に作ってあるアプリ
同士が干渉して収拾がつかない結果につながるから
ということが多いんでね?
単独アプリならUndo対応しているものが多いが
複数アプリ連係操作の場合はそうとも限らんから。
連係操作して始めて意味を為すアプリグループも
あるから単独のアプリの全画面表示を切り替えて
というインターフェースは今時あり得ないことは
言う迄もないし...
スレタイも読めなくなったジジイ消えろ
大学で学生が教師のフォルダに提出した提出ファイルを編集するのは普通は不可なんだが caclsコマンド使って権限変更したら編集・削除できるようになった 今現在はどうなってるかわからんが・・・ こういう場合どうやって回避する?caclsは外部コマンドだし
若者(笑)ktkr
>>640 caclsコマンドを実行できない権限のアカウントでアクセスさせる
んだからプロセス同士の相互干渉連係を前提としていた 古き良きWin16APIに対し、原則相互不干渉を前提としつつも、 多種多様なIPCを用いて極力Wn16APIとの連続性を保持し ようとするWin32APIの話題の原点そのものなんだが.. ついていけないワカい人が多いみたいなんで取り敢え ずクローズね。
>>642 後付けになってごめんね
それが俺その時学生で試しにやってみたらできたから学生全員がアクセスできてたと思う
一応ゼミの先生と事務所?システム管理?の所には報告したから大丈夫と思うけど
アクセス制限かありがとう
"MSゴシック"で表示しても、『等幅』ではないのですが、なぜでしょう? エディッタ上では罫線も縦横きれいに表示されるのですが、、、
"MS ゴシック"
>>410 つうか、なんで1秒後ごとにクリップボード消去してるのかわからん
クリップボードコピーした瞬間にクリップボード消去すればいいじゃん
負荷かからないし
将来著作権や特許などが全部廃止されるときが必ず来るね
>>643 お前懐古したいだけだろ?
少しは空気嫁
んだからアプリのウィンドウを同時に沢山作って 連係して使うことが出来るようにはなったけど 逆にそれを一部制限して使うことは出来なくなって しまった。パワーユーザーが自分で使う分には 困らないがそうでない人にそうなれるように教え なければならない(つまり引き継ぎたい)時には エラク苦労するねってことだろ。 クリップボードを使わせたく無いとかD&Dを禁止 したいとかはそのあたりから出てきてるんじゃね? APIスレの住人はそういう苦労は少ないだろけど
クリップボードを使うな、でOK。 引継ぎとかそういう話に持っていくならね。
クリップボード監視して、テキストだったら全て「うんこ」にしちゃえ
>>651 お前懐古したいだけだろ?
少しは空気嫁
>>651 ∩___∩
/ ノ \ ヽ
| ● ● | なにマジになってんの?
彡 (_●_) ミ
/、 |∪| ,\ このAPIやるから帰れよ
/.| ヽノ | ヽ
,,/-―ー-、, --、 .|_,|
r-、,'''";;:;;:;::;;;;:;;::;:;:;;::;:;`'- /_,l,,__ )
|,,ノ;;:;r'" ̄ ゙̄^"`Y'-、;;;::;:;::;:;:;:;::;:|
.ヽ,′ ExitWindowsEx"";;;;;⌒゙')
´`゙'''''''''''‐-‐'"`‐-‐'"゛ `゙´
| .‖ /
("___|_`つ
話はそう単純なもんじゃないってのは Cのライブラリ関数使うのと同じ感覚じゃ、APIなんて 使えたもんじゃない、一筋縄じゃいかない ってのと同じ
何も言ってないに等しいから気にすんな
鬼才すぐるw
>>410 顔真っ赤すぎ
というか何の教師やってるのかしらんがどうせITの負け組みだろw
タスクバーのプロセス隠蔽なんて少し調べればわかるだろうに
教師の癖に文章がやたら・・・・
なんでまた今更半月前のレスに顔を真っ赤にしてる奴らが 湧いてきたよくわからんね。
馬鹿な教師が居るらしいという肴があれば、それで十分宴会は開ける
宴会まではいかないなあ。
Windows APIってどの位覚えればプログラミングが ラクになるんでしょうか?先輩に聞いたら 「10個程度覚えれば後は都度調べればいいけど0個じゃ辛い」 といってるんですが信じていいでしょうか?
別に都度ググってもいいです ただ、どのDLLがどの機能を管轄しているかくらいは知っておくといいかもしれません /* 6個でウィンドウ表示 RegisterClassEx CreateWindowEx GetMessage TranslateMessage DispatchMessage PostQuitMessage */
10個じゃきついだろ・・・。
ググるためにもある程度体系がわかってれば良い
Windows API を覚えても Windowsアプリを作ったり、Windowsの仕組みを覚えられるだけで あまりプログラミングは楽にならない でも画像処理とかは楽になるかもしれない
構造体とメッセージもセットで
おばけのQちゃんの絵描き歌をシミュレートして 繰り返しアニメーション表示するアプリをAPIだけで組みたい んだけどどう組めばいいですか?
まずウィンドウクラスを登録します
674 :
672 :2010/03/14(日) 14:38:25
マウスで画面のサイズを変えた際に、縦横の比率を 変えないようにし、書かれているアニメもそれに 応じて(途中迄でも)大きさを変えたいです。
ウィンドウを表示して、その上に描画していけばいい。 で、ウィンドウサイズが変更されようとしているときに、縦横比率を変えないように変更して、 ウィンドウサイズに合わせて描画サイズを変えればいい。
演奏してる曲と同期してアニメーションさせるって話なら少し面倒。
タイミング固定とかならそれほどでもないだろうけどね。
歌詞ファイルみたいなフォーマットを決めてやるとか
マルチコア環境でプロセス毎のCPU使用率を正しく取得するにはどうすればよいのでしょう? PdhGetFormattedCounterValueで取得してみたところ、取得できるCPU使用率は タスクマネージャで確認できるCPU使用率の2倍になっています(2コアだから?)。 ということは取得できるCPU使用率の最大値は200となるはずと思っていたのですが 何故か100までしか取得できませんでした。(100以上は100として取得できる模様) ちなみにWindows付属のパフォーマンスモニターで確認してみると、こちらも タスクマネージャの2倍の値が表示されていますが、100以上の値もきっちり正しく表示されます。 取得できる上限を200にする方法か、タスクマネージャで表示されている値を 簡単に取得できる方法はありませんか?
ちょっと取得してる部分のコード晒してみろよ
このような感じです。 // オープン HQUERY hQuery; PdhOpenQuery(NULL,0,&hQuery); // カウンタ追加 HCOUNTER hCounter; std::string str = "\\Process(GOM)\\% Processor Time"; PdhAddCounter(hQuery, str.c_str(), 0, &hCounter ); // 3秒間の負荷計測 PdhCollectQueryData(hQuery); Sleep(3000); PdhCollectQueryData(hQuery); // 計測結果取得 PDH_FMT_COUNTERVALUE fntValue; PdhGetFormattedCounterValue(hCounter, PDH_FMT_LONG, NULL, &fntValue); // クローズ PdhCloseQuery( m_hQuery ); std::cout << fntValue.longValue << std::endl;
>>666 俺なんて引数も戻り値もちゃんと覚えているのは10個もない。
ただ、どんなAPIが「存在するか」はだいたい把握している。
>>681 PdhGetFormattedCounterValueのヘルプを見てみたが、
dwFormatにPDH_FMT_NOCAP100フラグが無いと、
100を超える値は全て100で返る仕様っぽいぞ。
家はシングルコアだから試しようが無いけどなorz
>>683 おっしゃるとおりでした!
PDH_FMT_NOCAP100フラグを立てると100以上の値も取得できるようになりました。
ありがとうございます!
>>666 Win32APIの目次みたいな一覧が色んな所にあるから
一通り流し読む
引数とかは一切無視
関数名と1行説明だけ読む
そんでおわり
その先輩はちょっと若いな
あんま意味の無い助言
昔Win32本といえばpetzoldだったけどあの本も今や.net本になってしもうたな
グローバルフック使ってプログラム側からキーボード操作したいんだけど、どうすればいいのか全然分からん 検索ワードだけでいいから誰か教えておくれ
ウィンドウメッセージを使ってるのかGetAsyncKeyState()系を使うのかで 挙動が違ってくるし、 突き詰めたらそんなに簡単な話でもないと思うけど。
ありがと でもググっても監視する方しか分かんないや
送るだけならフックの必要は無いから見つからないのも当然
692 :
デフォルトの名無しさん :2010/03/15(月) 20:19:51
シリアル通信について教えてください。 「WaitCommEvent」はタイムアウトで戻す事は出来ないんでしょうか? タイムアウトはRead,Writeのみなんでしょうか?
非同期通信に対応してるのだから、勝手にタイムアウトでも何でもすればいい。
694 :
692 :2010/03/15(月) 22:19:59
そのタイムアウトさせるのを、監視するスレッドを自前で作る必要があるのか SetCommTimeoutsみたいな設定で、WaitCommEventからイベント無しで 戻せるのか知りたいんです。
>>692 昔やった方法
・CreateFile()でPENDINGで開く
・WaitCommEvent()でイベントオブジェクトとともに渡す→すぐ返る→戻り値0、GetLastError()がPENDINGなら正常
・WaitForMultipleObjects()に指定し、でタイムアウトつきで待つ
スレッド化してるからWait〜で他のイベントオブジェクトもついでに待ってたな。
ググればどこかにサンプルがあるはず。自力で書けなかった記憶があるから。
特にPENDINGを使用する箇所
696 :
692 :2010/03/15(月) 23:23:06
>>695 PENDINGとはオーバーラップド構造体云々ってやつですか?
良く分からないので明日ヘルプ見ながら実機でちまちま試してみます、
有難うございました
697 :
デフォルトの名無しさん :2010/03/16(火) 14:41:47
USBメモリをつけたときにタスクトレイにアイコンでるけど このアイコンをクリックでUSB切断ってするけど この切断を行うAPIを教えてください
CM_Request_Device_Eject
>>698 うわっ!!
すごいwwwwwww
ありがとうありがとう。
Win32をやるなら、WDKのドキュメントにも目を通しておくと良いよ。
>>698 の系統なら、PnP Configuration Manager に含まれている。
701 :
デフォルトの名無しさん :2010/03/17(水) 18:10:02
UDPでソケット通信してるんですが recvfromで受ける時に12バイトきてるのに6バイトしか受けないと 残りは取れなくなりrecvfromの戻り値も-1になってしまいます。 えっと理想は、例えば12バイトデータが来てたとして selectでデータありかチェックしデータありなら6バイトrecvfromする ってのをループさせたいのですが・・・
702 :
デフォルトの名無しさん :2010/03/17(水) 18:39:23
なんで6バイトしかバッファ確保しないの?
recvfrom関数を呼び出してる行を見せて
ASCII文字をユニコードで読んじゃってる?
WinSockは-1が帰ってきてもWSAGetLastErrorだっけ?でエラー詳細をちゃんと取らないと正常終了かわからんよ といっても12バイトじゃバッファッファにはならんか
UDPは分割できない
>>701 706が正解。
メッセージの大きさを事前に(ネゴして)決めておいて全部読むしかない。
WSAEMSGSIZEが返されていたら間違いないな。 とりあえず64KB確保しとけば仕様的には絶対足りる。
まったくどうしようもない仕様だな
なぜわざわざそういう仕様に作ってあるのか考えず、文句をいう
>>709 みたいな奴は例外なく無能。
なんでこんなに粘着アンチは毎日ネガキャンに必死なんだろうな 周囲の環境を否定することでしか自我を保てない哀れな野郎だ
リストビューのヘッダの各カラムにも ItemDataに相当する値を入れられるような仕組みは無いのでしょうか。 このカラムにはどんな項目を表示しているのかの情報を カラム番号を使って取得できると便利なのですが。
新しいヘッダ(_WIN32_WINNT >= 0x0600)見ても無いね いつもの如くSetPropするしかないんでしょう
LVM_GETHEADER HDM_GETITEM HDITEM lParam
715 :
デフォルトの名無しさん :2010/03/18(木) 14:22:26
いろいろと役に立たないレスをいろいろどうも。
とりあえず
>>702 みたいな馬鹿なレスは勘弁してくれ
お前等ごみにわかりやすいようにサイズを言っただけなんだからw
ようするにだな、例えばな、例えばだからな?例えばつってんだろ!
通常は6バイトのデータがくるとする
だが、その6バイトのデータが立て続けてきちゃって12バイトになった場合にだ
今の使用だと、全部取ってから自分で分割ってことせんといかんが
それをまずは6バイトゲットして処理、そしてselectでデータありと判断
んで残りの6バイトをゲットみたいな感じでやりたいんよ。
要するにシリアルやファイル感覚で。楽したいんだよ!
まあお前等って頭悪いから聞いても無駄だったんだけど
とりあえず聞いてみただけだ、ゴミ同士で喧嘩するなよ
長文でUDP否定すんなド低脳
717 :
デフォルトの名無しさん :2010/03/18(木) 14:31:11
ほんとお前等って糞の役にも立たんくせに煽るのだけは必死だよな
小学生はTCP使ってなさい。
719 :
デフォルトの名無しさん :2010/03/18(木) 14:38:02
TCPでもできないだろゴミ つーかUDPを知らないからってすぐTCPってほざくのやめれ
UDPのバッファリングは境界を見失うので提供されない バッファリングしたければ自分でやれ
721 :
デフォルトの名無しさん :2010/03/18(木) 14:45:36
自分でやんなきゃダメなんだよなあ まあ、そうしますよ。
>>715 UDPは分割されないし、結合もされない。
出来ない事をやりたがるのが低脳の証。
>>719 TCPなら出来るが、いったい何を言ってるんだ?
そもそもUDPで単位が区切られているのは、データが損失した場合の保証がないので、
突然途中が抜けてしまった場合などにデータの区切りが不明になってしまうから。
しかもTCPと違って同一アドレスから送られてきている保証もないし、順番が前後する可能性だってある。
そういった問題に対処するのが嫌な人間のために、面倒な処理をTCPが引き受けてくれるようになっているんだろ。
725 :
デフォルトの名無しさん :2010/03/18(木) 17:37:22
遅レスで必死に煽ってる奴いてワロタ
MFCのGetSafeHwnd()と同じ役割をする関数ってありますか?
どう答えたらいいか悩むなぁ
>>726 MFCの実物のソースコードを眺めて考えればいいんじゃね?
MFCのソースがないので見比べられないんです・・・・
>>726 ,729
こんだけのことしかやってないぞ
afxwin2.inl
_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const
{ return this == NULL ? NULL : m_hWnd; }
これだけのことのために長い関数名つけて あまつさえ覚えなきゃならないのは苦痛だな
thisがNULLでメンバを参照するって どういう状況を想定してるんだろ
初心者は時々とんでもないことをやらかすからさ
CreateしていないCWndとインスタンス自体が存在しない状態を一つに纏める時? アサートを書く時は便利かも。
たまにインスタンスの実体に対して if (m_wnd.GetSafeHwnd() == NULL) みたいなコードを見るが、これは関数の意味をわかっていないんだろうな。
737 :
デフォルトの名無しさん :2010/03/19(金) 15:40:38
CPU名を取得するにはどうしたらよいのでしょうか?
739 :
デフォルトの名無しさん :2010/03/19(金) 16:18:58
めんどくせーから、ソース晒してくれ
740 :
デフォルトの名無しさん :2010/03/19(金) 16:29:46
>>738 簡単なサンプルを教えていただけないでしょうか?
とりあえずおぱいうp
742 :
デフォルトの名無しさん :2010/03/20(土) 01:20:50
Win32APIに限ったことはないのですが、VC++においてincludeした場合、 コンパイラは一体どこを参照しているのでしょうか? 例えばコンピュータ上でwindows.hを検索すると、たくさん合致するため、 どのwindows.hをincludeしているのかわかりません。
順番にwindows.hを削除していけばその内わかる
>>744 どこが嘘なんだ?
消していけば分かるだろ?
まぁ嘘ではない
747 :
742 :2010/03/20(土) 02:00:58
>>744 ありがとうございます。
$(VCInstallDir)includeなどとあったんですが
VCInstallDirに設定されているパスはどこで見ることができるのでしょうか?
コマンドプロンプトでsetと打ったのですが、VCInstallDirはありませんでした。
>>747 VCInstallDirは環境変数であるときもあれば、そうでない時もある。
Visual StudioをGUIとして使ってるときは環境変数ではない。
また、VCInstallDirはvcpp自体のインストールPATHを指す固定値なので見る方法は存在しない。
一方、コマンドラインから使用する場合は環境変数として使用する。
その際は事前にvcvars32.batを呼び出しておく。
だから削除しないまでもコンパイル時にエラーになるように順番にちょっとだけ書換えていけば良いだろ なんで応用と言うのも憚れるような単純な工夫すら出来ないんだ
適当なシンボルをgoto definitionすれば、windows.hを含むディレクトリに行きあたるだろ。
ま、いまどき、基本的にファイルは消さないほうがいい やるならrenameで(作業後復元をお忘れなく)
全部マクロ展開してFC掛けてみるとかね
753 :
デフォルトの名無しさん :2010/03/20(土) 07:23:28
特定の条件の時、MessageBox()で常に最前面にメッセージを表示させることができません。 特定の条件とは、MessageBoxを呼び出しているプログラムのウィンドウが非表示状態のときです。 ダイアログを作成し、ダイアログが表示されている状態でMessageBoxを呼び出した場合は 常に最前面に表示されることを確認しています。 また、どちらもhWndにNULL、uTypeにMB_TOPMOSTが指定されていることを確認しています。 原因がわからないのですが、何か仕様で制限されていたりするんでしょうか?
hWndにNULL
ダイアログ以外の通常のウィンドウ上で Tab ボタンを押した時に フォーカスを次のコントロールに移す機能って Win32API レベルでは提供されていないのでしょうか? あと同様にニーモニック機能(&F)とかでそのコントロールに移る機能についても ダイアログをリソースで作っておいた時にはできるみたいなのですが
ある
ダイアログとして作らないと出来ない メッセージループの方で処理すればよいかと SetFocus(GetNextDlgTabItem(メインウィンドウ,GetFocus(),Shiftキーフラグ))
>>757 Tabによる自動遷移に関してはダイアログじゃなくても可能
IsDialogMessageとTranslateAccelerator
お、IsDialogMessageで出来た IsDialogMessageがFALSEならDispatchすればいいのね
VC++ 2008でDLLを作りたいと思っています。このDLLはVC#2008から使うつもりです。 このDLLにウィンドウプロシージャでWM_COMMANDを受け取った時の動作も記述しておくことはできますか?
>>760 それならC#でWM_COMMANDを処理するプロシージャを書いた方が早いよ。
763 :
デフォルトの名無しさん :2010/03/21(日) 12:36:01
DialogBoxで、Ctrl+Cが押されたら何か反応する方法を教えてください。 RegisterHotKey/WM_HOTKEY以外でお願いします。
764 :
デフォルトの名無しさん :2010/03/21(日) 13:16:54
DNSAPI.DLLは再配布可能ですか?
>>763 SetWindowsHookExを使うのが手っ取り早い。
>>764 DNS関連のAPIはOS付属のDLLを使うんじゃなかったっけ?
質問があります。 Bitblt()でデスクトップの画像を取得して動画を作りたいのですが Aeroが有効だと時間がかかってフレームレートがガタ落ちしてしまいます。 Aero無効にせずに高速で処理できる方法はないでしょうか?
>>766 Vista以降ではGDIはレガシー扱いなので、使用しないことが望ましい。
Vista以降でもGDIのbitbltは十分に速くね? DIBにbitbltでコピーしてDirectXのテクチャを作って貼り付け 拡大縮小表示ができるアプリを書いたけどヌルヌルに動いてるよ
1920*1080の解像度でbitblt()が10FPSぐらいしかでず・・・ Aero切れば30以上でるのでAero切ることにします。 ぐぐったりしましたが解決方法なさそうなので
すごいスペックのPC使ってるな
ディスプレイは普通じゃね?
HDサイズの画像処理を不足なく行うのは、未だにハードウェアの支援が必要だ。 ATI RadeonだってIntel GMAだって最近は型番に「HD」を入れてるだろ? マーケティング的な意味合いもあるが、 基本的にはHDサイズのリアルタイム処理ができるようになったことを意味している。 地デジ対応でキャプチャを防ぐためにAero切りを行うのはまあ仕方ないが、 そうでもない単なる手抜きでそんな対応をするのはちとなあ、と人事ながら思うな。
773 :
デフォルトの名無しさん :2010/03/22(月) 04:32:20
ウィンドウを作成する時の事についてですが、 ***.lpszMenuNameにメニューネームを登録するだけじゃ メニューは表示されないのでしょうか? リソースファイルにIDR_MENUがメニューとして作成されているのですが、 ***.lpszMenuName = "IDR_MENU"; としても、メニューが現れません。なぜでしょうか?
776 :
デフォルトの名無しさん :2010/03/22(月) 04:36:51
>>774 そこにはそう書いてあったんですが、どうやってもメニューができないんです
>>776 どこか別の所を間違えてないか?
猫に書いてあるそのままのコードは機能するか試したか?
780 :
デフォルトの名無しさん :2010/03/22(月) 04:45:47
******.lpszMenuName = MAKEINTRESOURCE(IDR_MENU);
とすれば登録できました…。
猫でもわかるは嘘書きすぎですね…。
ウィンドウ定義時に
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst,
LPSTR lpszCmdLine, int nCmdShow)
のhPreInstの比較を行っているし…
32bitアプリでは絶対やっちゃいけないことなんじゃ…
http://homepage2.nifty.com/c_lang/sdk/sdk_00.htm
>>780 わかってねーのはてめーだ。
06のサンプルでは"SAMPLE02"という名前でメニューリソースを
一緒にコンパイルしてるからWNDCLASSに"SAMPLE02"を与えるだけで勝手に探してくれる。
てめーがやってるのは整数値による指定だ。
だからMAKEINTRESOURCE(IDR_MENU)マクロの使用が必要だ。
数値と文字列の違いくらいわかりなさいよねプンプン
783 :
デフォルトの名無しさん :2010/03/22(月) 04:58:48
784 :
デフォルトの名無しさん :2010/03/22(月) 05:00:38
>>782 あの…
普通に***.lpszMenuName = "IDR_MENU"; とやってもできなかったんですが汗
>>784 アホかてめーは。
元にしてるサンプルと一言一句同じに書き写して動かないならともかく、
自分でかってに一部を書き換えてるんだから、その責任は自分でとれ。
Win32 に手を出す前に、C からやり直した方がいいんじゃないか?
>>773 メニューのリソースの識別子を"IDR_MENU"で作ってないから。
"IDR_MENU"とIDR_MENUは別モノ。
"IDR_MENU"で作ってあれば、そのソースでちゃんと動く。
資源国とリオデジャネイロとリソースかけたのかな? 高度だな・・・
「リソースが見つからない」は誰もが通る道 > 32bitアプリでは絶対やっちゃいけないことなんじゃ… そんな事はないけど、常にNULLになるから比較とか意味のない無駄なコードだって事 その人はWin16の頃からやってるプログラマなので、つい書いてしまっただけだと思う TEXTマクロ使ってなかったり、文字列にchar配列決め打ちとか
馬鹿ほど人が間違ってる事にする物だ 馬鹿は今までの人生で全て人が間違ってた事にし続けたから、未だに改善もされず馬鹿なまま
猫に限らず、昔のWindowsプログラムの本のサンプルを参考にする場合、 何箇所か読みかえる必要があるのは確かだな。 特に文字列部分は char→TCHAR ”・・・”→_T("・・・") とか。 あとはWin9x系でOKだけどNT系でNGなAPIとか。 #何かあったっけ?
両対応にするわけでもないのに何も考えずにT系を使う馬鹿が多いよな。 結局ビルドオプションを変更して両方で確認していないから、変更したらエラーを出しまくる。 両対応でないのなら素直に文字列にはLを付けろという話だ。
つまり _tWinMain でなく wWinMain MessageBox でなく MessageBoxW ... を使えば良いんですね
>>791 みたいにTCHAR/_TCHARの区別がついてないやつも多い
>>780 わかってねーな。やっちゃいけないのは、複数起動の確認の為に
preinstが「NULL」以外である事を期待する事。
つまりms固有のマクロを使わず自分で用意して、 更にはwindows.h系のヘッダも自分で用意すればいい訳ですね。
どうせ9x系に対応する気ないなら どっちでもいいんじゃね
>>796 C/C++以外の処理系使うときじゃ普通にやってることだしね
>>754 hWndにNULLを入れている場合でも、呼び出し元のウィンドウが表示されていると
常に最前面に表示されていたので他に何か違いがあると思ったのですが、
原因はhWndにNULLを指定していることなのでしょうか?
そりゃそうだ
GetSaveFileName() を使って [名前を付けて保存] ダイアログボックスを 表示させると、メモリ使用量が一気に 4000K ほど増加し、OK またはキャンセルを 実行しても使用量が元に戻らないのですが、これはそういうものなのでしょうか?
50回それを繰り返してメモリ消費量が200Mも増えたというのなら ウィルスの感染を疑おう
>>801 デバッガの出力を見てみ
呼び出したときに大量のDLL読み込んでそのまま解放してないからしかたがない
そういうもんだ
納豆食う
805 :
デフォルトの名無しさん :2010/03/22(月) 22:40:32
リソースエディッタで作ったダイアログだと エディットやリストボックスの枠が立体的に表示されるのに 普通にcreatewindowで作るとただの黒い線の枠(ビジュアルスタイルにしても)になるのはなんで?
自分でそういう風に作っているからに決まっているだろ
要するに、デフォルトで作るウィンドウが古くさいってだけだろ。 ちゃんとスタイル指定すればダイアログとかと同じになるよ
>>794 API使う場合は_TCHARが普通だっけ?
#やべ、意識してなかったw
ちょっと教えてください。 Win32API というより、コモンコントロール話になるんですが、 ツールバーへ TB_ADDSTRING で SendMessage した文字列を 変更したいんです。 要は、ツールボタンの文字を変更したいんですが、 その際に文字列リソースへのインデックスもきれいにしたいんです。 (前回追加した文字列はツールバーの文字列リソース上に残しておきたくないんです) 変更またはまっさらにする方法を教えてエロい人!!
>>809 新しくツールバーを作り直して必要なデータをコピーする
>>808 _TCHARはtchar.h、TCHARはwinnt.hで宣言されている。
VC2008付属のヘッダだと、/Zaでコンパイルしなければtchar.hでもTCHARは使えるけど。
昔どうだったかは流石に覚えていないな。
コントロールパネルの「キーボード」で設定する「表示までの待ち時間」を取得するAPIはありますか? この値を使ってタイマをセットしたいのですが。
APIに関する良書を探しています APIで学ぶWindows徹底理解 安室浩和 アマゾンではこの本の評価が高いようですが これを買っておけば間違いないでしょうか・・ ちなみにAPIに関する知識はまるでないです
_で始まるのは実装系依存って話だからTCHAR使うのが普通じゃないのか
<windows.h>とか#includeするならTCHARでいい
_UNICODEとUNICODEも区別がつかないので両方指定してるな。
>>813 おいらは旧版しか持ってないけどプログラミングWindows、所謂ペゾルド本
これ読んだらAdvanced Windowsな
基本的には _UNICODEはCRT/ATL/MFC UNICODEはWin23API msacm.hとか例外もあるし片側が定義されていると自動的に定義される場合もある
>>820 GetSystemMetricsとか探してました。
ありがとうございます。
ただこれ、戻り値は0〜3で、実際のミリ秒ではないのですね。
250*(戻り値-1)でよさそうな感じだけど、
「ハードウェアによって異なることがあります」とか微妙なこと書いてあるし。
訂正。 250*(戻り値+1)です。
823 :
デフォルトの名無しさん :2010/03/23(火) 13:11:27
うるさいぶたがあ
コントロールパネルの「キーボード」で設定する「表示までの待ち時間」 はミリ秒で設定するわけじゃなくてトラックバーでの4段階じゃないか
>>824 インターネットのプロパティのセキュリティレベルのように、
いくつかの段階をプリセット値として選択できるようになっていて、
OS内部ではミリ秒単位で持ってるのかなと思ってました。
OS自体は0〜3の値で管理していて、それに対応する実際のミリ秒単位の値は
ハードウェアが独自に関連付けているということになるのですね。
Kbd Accとかいうソフトで結構自由にキーリピートの速度変えられてるけど何やってんだろうなあれ
もともとBIOS設定で変えられるだろう。 設定する方法はあったよ
828 :
デフォルトの名無しさん :2010/03/23(火) 16:39:33
じゃあ教えろよごみがあ
おしえてください、だろ?
830 :
デフォルトの名無しさん :2010/03/23(火) 16:52:24
おしえてくださいうじむしさんm(__)m
バカの癖にプライドは一人前 プライドが大事なら自分でなんとかしろ
BIOS設定教えろってのならスレチだから別のとこ行ってね
この辺り? SPI_GETKEYBOARDDELAY キーボード表示 (キーボード リピート) 開始までの待ち時間設定。 SPI_GETKEYBOARDSPEED キーボード表示の間隔 (キーボードリピートの速度) 設定。 SPI_GETFILTERKEYS 上記の拡張範囲。
834 :
デフォルトの名無しさん :2010/03/23(火) 18:09:45
もうおまえらみたいな役立たずにはきいてやらない
>>833 ありがとうございます。
さっそく以下のように試してみましたが、FILTERKEYSのiDelayMSecは1000になりました。
FILTERKEYS keys;
keys.cbSize = sizeof(keys);
SystemParametersInfo(SPI_GETFILTERKEYS, sizeof(keys), &keys, 0);
実際には右端に設定しているので250が入るはずなのですが、
ちょっと違う値になっているようです。
ATLとかナシでIEコンポーネントを自分のアプリで利用する方法って何かあります?
COM
VisualStduioの使い方の問題かもしれませんが、 APIで解決する方法があればと思い質問させていただきます。 VisualStudioから実行したプロセスがCreateProcess()した際に、 生成された子プロセスも自動的に同じVisualStudioに アタッチされるようにしておき、子プロセスのコードの ブレークポイントでも止まるようにしたいのですが、 どうすればできるでしょうか。 生成する子プロセスの数が多いので、 ひとつひとつ手でアタッチというのは避けたいです。 環境はVisualStudio2008です。
明示的にDEBUG_ONLY_THIS_PROCESSフラグを立てておかないと、 勝手にデバッグ対象にならないか?
840 :
デフォルトの名無しさん :2010/03/24(水) 07:44:59
TCHARと_TCHAR関連の話が出てたけど とりあえず UNICODEとANSIの場合、TCHAR型で、TEXT("")を使っとけってこと? んで、もっと豊富な文字コードの互換性考えたかったら_UNICODEで_TCHARで_T("")使っとけってこと? どういうこと?
841 :
デフォルトの名無しさん :2010/03/24(水) 08:10:22
よくわかんなかったから えーっとちょっといろいろプログラム動かして試してみたけど UNICODEをdefineすると、VC++(WinSDK上?)では必然的に処理上_UNICODEとなる。 undefしてない限り必ず_UNICODE _UNICODE定義になるならCRTで_TCHARや_T("")使っとかないといろいろおかしいよね?ってことかな ちなみに直接_UNICODEを定義したときとUNICODEを定義(結局処理系では_UNICODEになる)をしたとき TEXTマクロにおいてはそのサイズが2倍差となっていた。ようするに _UNICODEとUNICODEにTEXT("")では互換性がないってことかな? _T("")に関しては_UNICODEでもUNICODEもサイズ変化なしだった(もちろん_UNICODEをundefしちゃまずいが) ま、ようするに_TCHARと_T("")なら_UNICODEでもUNICODEでもサイズは同じだが TCHARとTEXT("")は_UNICODEとUNICODEでサイズが違うから将来的な互換性がないかもしれないってことだな 結論 _TCHARと_T("")使っとけ これでおk?
WindowsSDK TCHAR/TEXT/UNICODE 処理系定義 _TCHAR/_T/_TEXT/_UNICODE このスレ的には前者を使うべき
843 :
デフォルトの名無しさん :2010/03/24(水) 08:23:54
>>819 でも処理系で_UNICODEになるんだよね?どっちも
定義の時点でUNICODEなのは別にいいんだが、どのみち_UNICODEになる以上
_TCHAR/_T("")使わないと互換性ないんじゃないの?
TCHAR/TEXT("")は俺が動かしたプログラムの結果、UNICODEと_UNICODEでメモリのサイズが変わってしまったので
使わないほうがいいと感じた
844 :
デフォルトの名無しさん :2010/03/24(水) 08:29:26
>>842 いや、上使っても別に文句はいわないが、
UNICODE定義と_UNICODE定義のときにTEXTマクロだけサイズが変わってたぞ
だからTEXTマクロは互換性考えてつかわないほうがいいんじゃない?
TEXTマクロつかわないなら、最初から全部処理系定義に統一させて
処理系定義 _TCHAR/_T/_TEXT/_UNICODE
つかう方がいいんじゃないの?
#define UNICODEしても、SDK上では
#undef _UNICODEしておかないとどのみち、_UNICODEになるから
最初から#define _UNICODEしてるのと同じだよ たぶん
UNICODEを使うならL""
マクロによるAPIの切り替えはUNICODEによって行われるから MessageBox(NULL, _T("_Tマクロ"),.... であるとき_UNICODEだけを指定するとエラーになるのわかってて言ってる?
>>844 - TCHAR, TEXT, UNICODE, AW切り替えマクロ
- _TCHAR, _TEXT, _UNICODE
これらはセットなのでどっちかに統一すればいいだけの話
汎用テキストのデータ型名 / SBCS (_UNICODE も_MBCS も定義されていない場合) / _MBCSが定義されている場合 / _UNICODEが定義されている場合 _TCHAR / char / char / wchar_t _tfinddata_t / _finddata_t / _finddata_t / _wfinddata_t _tfinddata64_t / __finddata64_t / __finddata64_t / __wfinddata64_t _tfinddatai64_t / _finddatai64_t / _finddatai64_t / _wfinddatai64_t _TINT / int / int / wint_t _TSCHAR / signed char / signed char / wchar_t _TUCHAR / unsigned char / unsigned char / wchar_t _TXCHAR / char / unsigned char / wchar_t _T または _TEXT / 影響なし (プリプロセッサによって削除される) / 影響なし (プリプロセッサによって削除される) / L (後続の文字や文字列を対応する Unicode の文字や文字列に変換する)
・_UNICODE LPTSTRがLPSTR(つまりchar*) TEXTマクロはLPTSTR(つまりchar*) TCHARはwchar_t, _Tマクロはリテラル補助のLに置き換えられる。 ・UNICODE LPTSTRがLPWSTR(つまりwchar_t*) TEXTマクロはLPTSTR(つまりwchar_t*) TCHARはchar, _Tマクロは無効化される ・_UNICODEとUNICODE LPTSTRがLPWSTR(つまりwchar_t*) TEXTマクロはLPTSTR(つまりwchar_t*) TCHARはwchar_t, _Tマクロはリテラル補助のLに置き換えられる。
意味わかんねええええええええええええええ 普通にSDK使うときは何使えばいいんだよ!!!!!!! つか、そこまで考える必要あんの?
>・_UNICODE
>TCHARはwchar_t,
>・UNICODE
>TCHARはchar,
ここがダウト、ソース
>>850 >TCHARはWindows SDKとCRTの両方で定義されているので,複雑な変化をします。
>CRT系の定義が先に読み込まれた場合は_UNICODEに依存
>Windows SDK系の定義が先に読み込まれた場合はUNICODEに依存
どっちでもいいけどごちゃごちゃするのはごめんだ どっちかにそろえるべき いいかげんEXとか_とかで機能拡張するのやめて欲しいんだけどなあw
いくらなんでも EnumCalendarInfoExEx/EnumDateFormatsExEx はひどい
_tfreopen_sの引数には_TEXTを使って CreateFileの引数にはTEXTをつかう。 それだけの話だろう
Win32APIでは原則としてアンダーライン無し版を使う アンダーライン系は標準Cに準拠しつつもユニコードビルドにも対応するコンソールアプリを作りたい場合のみ使う 安全のためUNICODEと_UNICODEはセットで先頭で定義するべき 一部のヘッダではUNICODEを定義した場合に勝手に_UNICODEを定義されたりその逆もあるので片側だけ定義するとインクルードの順番次第では整合性が取れなくなる
>>853 >>850 をちゃんとを実行してみた?
_UNICODEとUNICODEを入れ替えて?
そかもプリプロセス展開した?
ウニコーデはもういいから
マクロなんか使わないで wchar_t と L"" 使うようにすればいいだけなんじゃないの?
>>860 そもそも wchar_t と L"" 自体がマクロなわけですが何か?
個人的には
TCHAR、LPTSTR、_T() マクロの使用して常に両対応できるようにしておくことをおすすめする。
ここだけ見ててもいかにウンコ仕様かよく分かるな
> そもそも wchar_t と L"" 自体がマクロなわけですが何か? そうだったのかー
865 :
デフォルトの名無しさん :2010/03/24(水) 11:59:59
> L"" 自体がマクロなわけですが何か? > L"" 自体がマクロなわけですが何か? > L"" 自体がマクロなわけですが何か? > L"" 自体がマクロなわけですが何か? > L"" 自体がマクロなわけですが何か? > L"" 自体がマクロなわけですが何か? > L"" 自体がマクロなわけですが何か? > L"" 自体がマクロなわけですが何か? > L"" 自体がマクロなわけですが何か? > L"" 自体がマクロなわけですが何か?
別にUNICODEビルド云々は関係ないぞ wchar_tはC89、つまり20年前からの標準 wcs〜系の関数もC95、つまり15年からの標準 MSすらWin9x系サポートをとっくの昔に放棄し VC++はWin9x系で動作するバイナリを出力しなくなっているのに TCHARとかいううんこに真面目に付き合う意味があるとは俺には思えんな
質問者が今どっちでビルドしてるのかもわからないような状況だと 説明するのも面倒だからTCHARで説明するのがいいw
なぁにそのうちUnicodeも古いっていう時代がやってくる
>>867 いいたいことは分からないでもないが、
L""な文字列を真面目に扱ってる処理系なんてWindowsくらいなものだろ?
Unix系のプロダクトでワード文字列を使ってるソースコードなんて見たこと無いぞ。
もっぱらUTF-8をバイト文字列で扱うものばかりだ。
Windows向けに書いたコードをそのままUnixに移植したいというケースはあまり多くないけど、
両対応にするにはTCHAR/_T()で統一しておくのが一番簡単じゃね?
>>870 自分で試してもいないソリューションを言ってるのが丸分かりだな……
Unix系のプロダクトで云々〜も、単にお前が無知なだけ
UTF-8(というかUnicode)が広く使われるようになるずっと前からxlibは
wchar_tを使っていたし、BSDのCitrusのように、Unicodeベースではないi18n
実装もある
TCHARとかってUNIX系でも定義があるの?
∩_∩ / \ /\ | (゚)=(゚) | 人人人人人人人人人人人人人人人人人人人人 | ●_● | < どうでもいいが誰にも迷惑かけずにUNICODE> / ヽ < を扱えよな > | 〃 ------ ヾ | YYYYYYYYYYYYYYYYYYYYYYYYYYYYYY \__二__ノ ∩ ∩ | | | | | |__| | ./ 一 ー \ 人人人人人人人人人人人 / (・) (・) | <そんな方法あるの?> | ○ | YYYYYYYYYYYYYYYY \__ ─ __ノ ∩_∩ / \ /\ | (^)=(^) | 人人人人人人人人人人 | ●_● | < Lマクロってことだよ > / // ///ヽ <言わせんな恥ずかしい> | 〃 ------ ヾ | YYYYYYYYYYYYYY \__二__ノ
>>871 wchar_tがC/C++の標準規格にあり、xlib等で標準的に使われてるのも分かった。
けどそれがTCHAR系を使用しないというポリシーの積極的な根拠にはならないよね。
>>872 ない。しかし高々数個のマクロを再定義するくらいだから大した事はないはず。
今回の議論のためにGTK+とapache-2.2のソースコードを調べたが、
GTK+ではwin32とx11周り、apacheではwin32周りの対応でwchar_tを使用している。
同じくapacheではwin32周りでTCHARも使用している。
apacheではAPRライブラリ内にucs2<->UTF-8のコンバーターがあり、
大半のコードはシングルバイト(char)で記述されている。
GTK+では確認してないが、ほぼ全てのソースコードでcharが使われてるのはapacheと同じ。
言語の標準仕様でソースが完結しないのはさびしいね マクロだらけで別の言語みたいになる
知識ひけらかしたいのかも知らんがボロが出てるしもうやめろと
>>861 レベルの恥ずかしいことを言っておきながら、ここまで頑張るのは
ある意味凄いな
悪いけどお前の「おすすめ」なんて誰も聞かないと思うよ
TCHAR版のCRT使っておきたければTCHARは買いですぞ まぁ2000からGDIの文字列出力がウニ子なんでウニ子でビルドしないと 内部変換噛まされるという現実があるが
WCHARは現状UTF-16だが wchar_tにUTF-16のような可変長のデータを格納するのは本来不適切 互換性のためとはいえVisualC++等の実装は腐っている WCHARとwchar_tは偶然一致しているだけの別物と考えるべき だからWCHARとLもセットで使うべきではなくTEXTを用いるべき
>>880 >互換性のためとはいえVisualC++等の実装は腐っている
>WCHARとwchar_tは偶然一致しているだけの別物と考えるべき
>だからWCHARとLもセットで使うべきではなくTEXTを用いるべき
????
書く前によく推敲しような。
>>879 > TCHAR版のCRT使っておきたければ
別に要らないでしょ、そんなものは
TEXTの代わりにTCHAR*じゃだめなん?
おばかさんねえ
>>880 が言いたいのはこういうことだろ
- L"..."の型はwchar_t[n]
- WindowsAPIの1実装であるマイクロソフトのWindowsで
WCHARがwchar_tのtypedefだったからといって
他の実装でもそうなっているとは限らない。
したがって、L"..."の型をWCHAR[n]と期待するのはセマンティクスとしておかしい
「他の実装」って意味分からんw WCHARがそもそもマイクロソフトがWindowsのために定義しているマクロじゃないかw
TCHARネタはしったかがよく釣れるなあ
>>888 WindowsAPIにはWineのような互換実装が他に存在しえて
そのような環境向けの言語処理系でwchar_tがWCHARと互換がない可能性がある
おまえらがそうやって型にこだわらないからx64で動かないアプリケーションがごろごろ出てくるんだよ・・・
なんつうか本当に仮定の話だけで無駄な骨折りしたがる奴多いんだな どうしても文字型を隠蔽したいのならtemplate使えよ basic_string<ほげ>でいいだろ 標準でも何でもない、MSのドキュソマクロじゃなくてさ
>>870 >Unix系のプロダクトでワード文字列を使ってるソースコードなんて見たこと無いぞ。
へー w
どこから隠蔽が出てきた
>>895 お前が何派だか分からんが、WCHAR == wchar_tを仮定できないのなら
TEXTマクロもリテラルの代わりに使えないのは分かるだろ
WCHARの内部表現がコンパイラがサポートしていない型なら、
実行時計算するしかないからな
つまり無駄な努力なんだよ
>>896 コンパイラはchar/wchar_t以外の文字列型を持っていても構わない
>>897 ははは
擁護もここまで行くと基地害見てるわ
第三の文字列リテラル型か
非標準どころか、存在すらしないコンパイラのことまで考えて妄想してたのな
電波もここまで行くとついていけんわ
相手を馬鹿にしたような発言した時点でどっちもどっち 落ち着こうぜ
互換性と規格準拠度を両立させる場合、VisualStudioやWDKの将来のバージョンではTEXTマクロの中身を置き換えるしかないという話 まあ無駄な努力ではあるな
>>900 さくっとC1XやC++1xを取り込んでしまえばいいだけの話だよ
UTF-16リテラルが増えてかえって今より状況がよくなるかもしれん
正直API直触りしてるコードがレガシー化して どのみちそのまま動かなくなる可能性のが大だと思うぞ
>>902 いやいや、きちんと書かれているプログラムは16bit時代のでも、
いまの64bitのWindows7でソースコードレベルの互換性がほぼ保たれているもの
MSはここだけは気を遣ってるから
16bitから32bitに移行するときに躓いたり
MBCS/Unicodeビルドの両方を提供するので困ったり
XPからVistaに移行するときに急に動かなくなったり
64bit対応するのに大幅な改修が必要だったりするのは
大抵は型の大きさに勝手な仮定を置いていたことが問題じゃないのかね
904 :
デフォルトの名無しさん :2010/03/24(水) 15:08:20
ツールバーって上か下にしか置けないのか?
CCS_で始まるコモンコントロールスタイル見れ
> 16bitから32bitに移行するときに躓いたり 知ったか発見
シッタカとシッタカ叩きしか居ない 正しい答えは何だよ いい加減FAだせ
自分の意見を押し通すために、それぞれが自分勝手に条件設定するんだからまとまるわけがない。 そもそも答えは一つじゃない。
909 :
デフォルトの名無しさん :2010/03/24(水) 17:59:56
うんこが漏れそうなんだが
最近ノートン先生が俺の作ったソフトを問答無用に削除してくれる 素敵
最近BitDefenderが俺のシステムを問答無用に削除してくれた 素敵
912 :
デフォルトの名無しさん :2010/03/24(水) 22:18:14
intのキーコードを元に、「VK_TAB」のような文字列を返すAPIってありませんか?
MapVirtualKeyかな?
GetKeyNameText は?
質問です。 ネットワークプリンタがやってるように、 LAN上のある特定の(自作)サーバープログラムを検出することは可能でしょうか? NetServerEnumでマシン一覧を取ってきて、 順番にポートを叩くという方法を思いついたのですが、 流石にスマートではないですよね。
ブロードキャストするとか、そんな感じじゃね?
パイプとOpenSCManager
設定ファイルを暗号化してエディタ等で見れないようにして、 アプリケーション起動時にパスワードを入れないと動作しないような 機能を実装したいのですが、Win32のAPIに暗号化アルゴリズムはありますか?
920 :
デフォルトの名無しさん :2010/03/25(木) 05:41:25
質問1 PCTSTRは定数文字列だから、直接リテラル指定してもいいけど、PTSTRは非定数文字列だから文字列リテラルじゃダメでバッファ指定ってことでおk? 例 Sample(PTSTR, PCTSTR) ↑こういうAPIがあったとき Sample(TEXT("AAA"), TEXT("AAA")) ではなく、 TCHAR buf[] = "AAA" Sample(buf, TEXT("AAA")) と使わなければエラーになる場合がある 質問2 PTSTRとLPTSTRって全く同じものと考えていいの? 初心者的質問だけど回答お願い
>>920 1. ok.
2. 現在はPSTRはLPSTRの別名という扱いになっている
GetCurrentDirctoryというAPIについて。 GetCurrentDirectory(256, &buf); //buf[256] としたのですが、bufをprintfすると、「C」としか表示されません。 これはCドライブがカレントディレクトリという意味なのでしょうか? 「C:\」と表示されないとおかしいと思っているのですが、間違いでしょうか? また、SetCurrentDirectory(TEXT("C:\\WINDOWS"));としたにもかかわらず GetCurrentDirectory(256, &buf);とするとやはり、bufの中身は「C」としか表示されません。 何か思い当たる原因などありますでしょうか?
>>922 ワイド文字をprintfなんてしちゃうから
>>922 簡易デバッグはMessageBoxでおk
またWCHARとprintf(L"%s", なんだなwww
>>921 朝鮮pedia1ページ分の知識しか無い奴が全く無関心な奴に妙な優越感持っちゃってんだろ
いまさらnearやfarやhugeの話すんのwww
ウェッブ1ベージの単位をどう見てるのか判らんがww 字数が少なくなって当然な事に、なんと!ハングルは英アルファベット四文字を一単語に集約して表記できるんだ 浅知恵というか、やっぱりと言うか訓読みの「糎」なぞには全然敵わんのだが
またチョンかww ハングル大移動だよwww
>>931 マウスクリックされたイベントでカーソルの位置を保存しておき、
WM_PAINTでその位置の色を変更するだけだろ。
メッセージを表示させて時間が来たら消します i= MessageBox(hwnd, Message, Title, MB_OK); Set timer 時間経過→ SendMessage(?,WM_KEYDOWN,VK_RETURN,0); Killtimer SendMessageでMessageBoxにエンター入力して表示を消すつもりです。 WM_KEYDOWNにVK_RETURNを送るとエンターの入力になりますよね? また、MessageBoxのハンドルをどうやって所得すればよいのか解りません。
>>933 そんな怪しい処理作らずに
自分でダイアログ作って時間が経ったら消えるようにしたら?
>>935 PeekMessage(&msg, NULL, WM_QUIT, WM_QUIT, PM_REMOVE);が成功してないのかMessageBoxと一緒に
プログラムも終了してしまいます。原因が解らない程レベルが低いので別の処理で代用しようかと思いました。
やっぱ邪道すぎますかね? ダイアログ勉強してみます。
注 : WM_QUIT は、メイン メッセージ キューで取得されないように、メッセージ キューから削除する必要があります。
スレッドフックでMessageBoxのプロシージャ横取りすればいいじゃないの 俺はそうしてるけど
939 :
デフォルトの名無しさん :2010/03/26(金) 01:01:56
MAX_PATHって終端文字数も含まれてるの? MAX_PATH + 1で定義したほうがいい?
含まれていたと思うけど+1したほうがいい場合もあるかもしれない MSDNにも+1されてるサンプルがいくつかある
MAX_PATHって文字数のことだよね? ワイドキャラの場合はMAX_PATH*2っていう書き方で良いんだよね? そうしないとどう考えても文字数が足らないんだけど。 もしかして間違ってる?
間違ってる
944 :
デフォルトの名無しさん :2010/03/26(金) 07:12:21
>>935 のようなタイマー付きのメッセージボックスで、
あと何秒で閉じるかカウントダウン表示ってできませんか?
>>943 間違えた
ワイドキャラはワイドだから関係ないわw
std::string なんかだとMAX_PATH*2しないとだめだな。
そういうコード書けばできるだろ。
WバージョンのAPIでは、約32000文字がMAXになるというのがあってだな・・・
そりゃまた別の話だ
std::stringにワイド文字を格納しようとするおとこの人って…
次スレまだか?
std::stringよりすべてにおいてCStringの方が使いやすいと思ふ
std::basic_string<TCHAR>でええやん。 っってかスレ違い
変換がめどい 何もかもめどいが おれはあきめらない!
windows.hを入れたらmin maxがマクロ定義されていて tr1::mt19937::minなどのメソッドが使えなくなってしまいます min maxを使うソースファイル単位でmin maxを#undefで消してしまっても問題ないでしょうか?
#define NOMINMAX
>>954 今はATLならddkに入ってるから最新版が簡単に使えるよ\(^o^)/
VS2008の_ATL_VERは0x0900で6月にVS2010が出るまで一応最新版 先月でたWDK7.1の_ATL_VERは0x0800 もっと新しいDDKがあるのだろうか
タイムスタンプで判断してたw><
最新のATLは最新版ではなかったという事か
コマンドラインからアプリケーションを終了させるアプリを作りたいと思っています。 taskmgr.exe や、calc.exe を終了させることはできたのですが、 肝心の終了させたいアプリ(仮にアプリAとします)は、OpenProcess()に失敗し、終了させることができません。 cygwin の kill.exe -f でもアプリAは終了させることができません。 しかしアプリAはタスクマネージャからは終了させることができます。 中心となる処理は以下のようです(インデントがおかしくなると思いますがすいません)。 何か他に必要となる処理(API)があれば教えていただけないでしょうか。 snapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); for (Process32First(snapShot, entry); Process32Next(snapShot, entry);) { if (strcmp(entry->szExeFile, argv[1]) == 0) { terminateId = OpenProcess(PROCESS_TERMINATE, 0, entry->th32ProcessID); if (terminateId == NULL) { printf("\n Access failed. \n"); return 1; } TerminateProcess(terminateId, 0); return 0; } }
taskkill
static const LVCOLUMN column = { ... };
SendMessage(ListView,LVM_INSERTCOLUMN,0,&column);
・マルチバイトビルドでLVM_INSERTCOLUMNを送ると死ぬ
・MSDNでは、lparamはconst LPLVCOLUMNとある
・Unicodeじゃないからcomctl32 v6を使うマニフェストは無し
・Unicodeビルドだとconst定義でも問題なし
どういうことなの‥‥
>>961 殺す前にデバッグ特権を有効にしてないか?
Windowsの特殊なデータ型の数値をそのままで出力するには デバック出力の関数で出力するしかない? たとえばHANDLEやDWORDやTCHARやintがごちゃまぜになってる構造体のメンバ変数を すべて一度に参照したいんだけど
補足 そのときに使う関数はOutputDebugStringであってる?
>>968 一応あってるけど、普通デバッガでブレークポイント使わない?
エロゲらしい微笑ましい不具合です
エクスプローラのバグなんだけどな。
外人の作ったクソアプリみたいだな
そりゃエクスプローラ、Windowsはアメリカ製だからな
SetTimerでタイムアウト後、タイマのプロシージャの中でKillTimerしても良いんでしょうか? プロシージャ外じゃないと駄目なんて事は
安心しました、ありがとうございます。
>>970 >上記で誤って作成されたフォルダを「エクスプローラ」上で削除した場合、以前より存在する「My Documents」(2000/XPの場合)
>または「Documents」(Vista/7の場合表示上は「ドキュメント」)が「エクスプローラ」自体の問題により削除される危険があります。
なんじゃこりゃ
ひどすぎないか
作るときは区別されるのに アクセスするときは区別されないって Windowsって馬鹿じゃないの?死ぬの?
というか、試しにmkdirコマンドで作ろうとしたが、作れなかったぞ。
installshieldのバグじゃないかな
色々試してみたのだが、SHFileOperationが空気読みすぎたのが原因っぽい。 最後に空白を付けたファイル名を渡しても、 その空白を取り除いたファイルを対象にしてしまうみたいだ。(x64版Windows7) ちなみに、「\\?\」プリフィックス付じゃないと、 空白で終了するファイル名はCreateFile等では無効扱いされる。 インストーラが頑張り過ぎたのも、結果的に一因となってしまっているな。
>>983 そこまでやってくれるなら、逆に「空白つき」のフォルダを作る方法のほうが知りたくなってくるな。
985 :
983 :2010/03/28(日) 03:08:19
あと、ファイルと書いたけどディレクトリも挙動は同じだった。
まめFile5(ver6.1.4、64bit)で最後にスペースを付けても削られた パス解析無効(\\?\を付ける)でないと付けられないって事は Win32サブシステムの制約なのかしら POSIXサブシステムなら話は変わるかもしれんが‥‥そこはスレ違いか
cygwin だと簡単に作れるね>空白末尾ファイル/フォルダ
988 :
983 :2010/03/28(日) 03:51:28
あ〜、詳しく調べると、 CreateDirectory/RemoveDirectoryの仕様がファイルとは微妙に違うな。 末尾に空白があると、それを取り除いた上で処理されるみたいだ。 ディレクトリに関してだけで言えば、SHFileOperationが原因とは言い切れないか。
989 :
983 :2010/03/28(日) 03:58:04
無論、プリフィックス付は空白除去無しで処理される。
LPSって何ですか?
いや、cygwinで普通にやるかぎりでは空白つきフォルダは作れなかったぞ。 bash-3.2$ ls a b c bash-3.2$ mkdir "a " mkdir: cannot create directory `a ': File exists bash-3.2$ mkdir "d " bash-3.2$ ls -l total 0 drwxrwxrwx+ 2 user なし 0 Mar 28 08:35 a drwxrwxrwx+ 2 user なし 0 Mar 28 08:35 b drwxrwxrwx+ 2 user なし 0 Mar 28 08:35 c drwxrwxrwx+ 2 user なし 0 Mar 28 08:36 d bash-3.2$
MSDNとかのプログラミング例でよく引数が0とNULLを併用してるのはなぜ? SampleRoutine(0, NULL, NULL, &buf) みたいに。0とNULLをあえて使い分ける理由ってなんかあんの?
NULLだったらハンドルか何かだなって分かる ってだけ TRUEとFALSEもAPIではnon-zero/zeroだから実際に値指定してもいいけど ぱっと見てBOOLだと分かる方がいいのでやらない
型の違いだろ
旅に出てくるから新スレ立てとけ
そういう事か
hoge((bool)0,(HANDLE)0) みたいなことはしてもいいと思う
っつーか1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。