09:09

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2776-21-04
#original-date: 2.03.2008 Sun
#original-time: 9:04 PM
#original-day:  2776
#original-host: WinXP Prof SP2 (Build 2600)

УУУУУУУРРРРРРРАААААААААААААААА!!!!!!

Спустя три с лишним часа я наконец получила письмо массой целых 35 кило!

#music: Dr.LPVE & D.Essex\Initial D Third Stage\Max Power

09:09

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2776-19-30
#original-date: 2.03.2008 Sun
#original-time: 7:30 PM
#original-day:  2776
#original-host: WinXP Prof SP2 (Build 2600)

Всё, пилять. 22 кило получила, и на выход! Сервер в коме.

#music: Need For Speed II SE\Mystic Peaks Techno

09:08

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2776-18-59
#original-date: 2.03.2008 Sun
#original-time: 6:59 PM
#original-day:  2776
#original-host: WinXP Prof SP2 (Build 2600)

Пишу класс для работы с FTP. Использую WinInet ^^ Всё делаю по науке, читаю статью в MSDN, где всё популярно расписано. В очередной раз замечаю, что в примерах используется GOTO как у меня, тоесть для обработки ошибок. Я к такому GOTO пришла из VB с его "On Error GoTo". А автор из Microsoft какими тропами до этого добирался? Чувствую, что также как и я...

А вот ещё прикол. В FtpFindFirstFile() читаем такое страшное:

FtpFindFirstFile is similar to the FindFirstFile function. Note, however, that only one FtpFindFirstFile can occur at a time within a given FTP session. The enumerations, therefore, are correlated with the FTP session handle. This is because the FTP protocol allows only a single directory enumeration per session.

Я уже чувствую, что кирдык, придётся каждый раз подключаться/отключаться. Но потом в статье читаю уточнение, что имелось в виду...

After the application completes the directory enumeration, the application must make a call to InternetCloseHandle on the handle created by FtpFindFirstFile. Until that handle is closed, the application cannot call FtpFindFirstFile again on the session handle created by InternetConnect. If a call to FtpFindFirstFile is made on the same session handle before the previous call to the same function is closed, the function fails, returning ERROR_FTP_TRANSFER_IN_PROGRESS.

Мда... Имелось в виду, что соединение для перекачки данных нельзя заюзать два раза, а не то что вообще за одну сессию нельзя ни чего делать дважды... Полагаю, в последнем случае автор FTP протокола очень раскаивался бы в содеянном...

#music: Need For Speed II SE\Last Resort Techno

09:08

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2776-19-24
#original-date: 2.03.2008 Sun
#original-time: 7:24 PM
#original-day:  2776
#original-host: WinXP Prof SP2 (Build 2600)

Пилять! Здешний GPRS очень смахивает на безлимитку. Ага. Скачаешь больше десяти кило за сессию, и скорость падает до нуля с периодическими просветлениями. Ага. А после трёх сессий вообще дозвона нет ни какого. Ночной форсаж, пля!

Пипец. Хочу найти урода, который ведёт дела с местным GPRS, закрыть его в комнате, вколоть какой-нибудь яд и вручить телефон чтобы он скачал PDF метра на три с картинками о том как изготовить антидот. Это было бы незабываемое зрелище.

Уроды.

#music: Need For Speed II SE\Mediterraneo Techno

09:08

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2776-17-54
#original-date: 2.03.2008 Sun
#original-time: 5:54 PM
#original-day:  2776
#original-host: WinXP Prof SP2 (Build 2600)

Надо бы карточку на Инет купить, но так влом, что прямо и не знаю, что делать. Нет, хочется, конечно наконец добраться до дайриков, но во-первых крайне влом платить Дальсвязи, а во-вторыхкрайне влом идти в Инет через Дальсвязь.

Кстати, не так давно Призрак, мягко говоря, удивил. Сказал, что даже не думал, что у нас могут быть спутниковые тарелки и Инет через них. Мощно. Я когда-нибудь напишу две книжки: слёзно-юмористическую "Россия глазами москвичей" и учебник "Путеводитель по России для москвичей". Последняя будет в картинках, иначе никто читать не будет.

#music: Need For Speed: High Stakes\Liquid Plasma

09:08

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2776-17-32
#original-date: 2.03.2008 Sun
#original-time: 5:32 PM
#original-day:  2776
#original-host: WinXP Prof SP2 (Build 2600)

Ха, а в NT4 Server с Desktop Update нет ограничения на максимальную длину элемента в Autorun... Хорошо...

#music: Need For Speed III: Hot Pursuit\SHOW3

09:08

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2776-08-02
#original-date: 2.03.2008 Sun
#original-time: 8:02 AM
#original-day:  2776
#original-host: WinXP Prof SP2 (Build 2600)

А Princess 69 мне упорно кажется пародией на Isaku...

А надпись "The Animation" в названии говорит, что где-то я уже видела картинки, похожие на Princess 69...

#video: Princess 69 4

09:07

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2776-05-07
#original-date: 2.03.2008 Sun
#original-time: 5:07 AM
#original-day:  2776
#original-host: WinXP Prof SP2 (Build 2600)

А в Magic Woman M настолько каваййная прорисовка, что жалко, что сняли всего две серии... Правда в первой серрии народ разошёлся вообще не на шутку, что снизившееся качество прорисовки второй просто в глаза бросается. Зато в второй больше стилизация под RPG ^_^

#video: Magic Woman M 1(sub)(AU-H)

09:07

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2776-00-37
#original-date: 2.03.2008 Sun
#original-time: 12:37 AM
#original-day:  2776
#original-host: WinXP Prof SP2 (Build 2600)

Каких только программных изощрений не изобретают люди, лишь бы сизбежать команды GOTO... Последний пример был с выносом части после GOTO в отдельную функцию.

#music: Yuki Kajiura\Madlax OST\calm days

09:07

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2776-00-19
#original-date: 2.03.2008 Sun
#original-time: 12:19 AM
#original-day:  2776
#original-host: WinXP Prof SP2 (Build 2600)

Хммм... У меня единственная программа с файлом справки - Global Hotkeys... А ставить Help Workshop так лениво... И писать CHM файл справки тоже лениво... Убить справку и перенести в ReadMe?

Кстати, INI файл я перенесла в Application Data. При обновлении программы и первом запуске старый должен сам туда перелететь.

А ещё я случайно узнала, что у меня программа уже несколько лет поддерживает не только числовые коды клавиш, но и константы вида VK_F... Я в шоке... Думала, что это за две загадочные функции такие...

#music: Yuki Kajiura\Madlax  ED Single\inside your heart

09:07

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2776-00-03
#original-date: 2.03.2008 Sun
#original-time: 12:03 AM
#original-day:  2776
#original-host: WinXP Prof SP2 (Build 2600)

Хммм... А INI файл? В Application Data поместить?

#music: Wain L\Initial D Battle Stage\Don't You Wanna Be Free (Battle Stage Ending)

09:07

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2775-22-23
#original-date: 1.03.2008 Sat
#original-time: 10:23 PM
#original-day:  2775
#original-host: WinXP Prof SP2 (Build 2600)

Вариация на тему анекдота про трансформатор.

- Как работает двигатель внутреннего сгорания?
- РРРРРРР! Пшшш... РРРРРР! Пшшш...
- Двойка.
- Почему?
- Турбины не было в задании.


/* Надо будет поточнее выяснить как устроена заслонка в карбюраторе... */

#music: Starlet\Initial D Battle Stage\You're Gonna Be

09:07

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2775-23-17
#original-date: 1.03.2008 Sat
#original-time: 11:17 PM
#original-day:  2775
#original-host: WinXP Prof SP2 (Build 2600)

Отлично ^_^ Маленький трюк удался ^_^ Теперь Global Hotkeys запускает программы на текущем рабочем столе, что крайне удобно ^_^

А вот код, чтобы получить этот самый текущий рабочий стол ^^

Public Function GetInputDesktopName() As BStr
 Dim hDesk As API_HANDLE
 Dim Buff() As Byte
 Dim lpLen As Long
 Dim UB As Long
 Dim RC As Long
 
 Const DESIRED_ACCESS = DESKTOP_SWITCHDESKTOP Or _
                        DESKTOP_ENUMERATE Or _
                        DESKTOP_CREATEWINDOW
 
 hDesk = OpenInputDesktop(0, C_FALSE, DESIRED_ACCESS)
 If hDesk = 0 Then Exit Function
 
 UB = 100
 ReDim Buff(0 To UB)
 RC = GetUserObjectInformation(hDesk, UOI_NAME, Buff(0), UB, lpLen)
 
 If lpLen > UB Then
   UB = lpLen
   ReDim Buff(0 To UB)
   RC = GetUserObjectInformation(hDesk, UOI_NAME, Buff(0), UB, lpLen)
   If RC = 0 Then GoTo hExitSub
 ElseIf RC = 0 Then
   GoTo hExitSub
 End If
 
 GetInputDesktopName = asGetStringFromPointerByAnyA(Buff(0))

hExitSub:
 CloseHandle hDesk
End Function



GOTO вставила из вредности, чтобы не писать повсюду "CloseHandle hDesk".

А теперь приведём программу в божеский вид ^^

#music: Morris\Initial D Battle Stage\Crazy for your Love

09:06

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2775-22-17
#original-date: 1.03.2008 Sat
#original-time: 10:17 PM
#original-day:  2775
#original-host: WinXP Prof SP2 (Build 2600)

Эврика, кстати. Зачем писать лишний промежуточный файл? Вызываем сами себя с параметром. Таким образом, если программа запущена без параметров, то запускаем интерфейс, а перед этим смотрим чтобы это был первый запуск. Если же есть параметр, то это - имя файла. Запускаем в любом случае и выполняем горячую клавишу.

#music: Maxi Coveri\Initial D Battle Stage\Golden Age

09:06

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2775-21-50
#original-date: 1.03.2008 Sat
#original-time: 9:50 PM
#original-day:  2775
#original-host: WinXP Prof SP2 (Build 2600)

Так. Надо бы обновляться, пока мои деньги не распланировали на ближайшие десять лет...

А вообще, для меня загадка. Квартиры дорожают, народ ноет, что теперь купить новую квартиру просто невозможно, а потом бежит скупать квартиры пачками. Это как?

#music: Initial D\Initial D Second Stage Non Stop Selection\Sophie / Don't You (Forget About My Love)

09:06

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2775-21-41
#original-date: 1.03.2008 Sat
#original-time: 9:41 PM
#original-day:  2775
#original-host: WinXP Prof SP2 (Build 2600)

А лицо Кунсайта надо было видеть, когда Луна исчезла ^_^ Правильно, нечего понты метать и делать все с тройным достоинством ^_^

#video: SM LiveAction - 27

09:06

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2775-21-36
#original-date: 1.03.2008 Sat
#original-time: 9:36 PM
#original-day:  2775
#original-host: WinXP Prof SP2 (Build 2600)

Мистическую атмосферу пещеры ТК портит разве что только кабель, протянутый вдоль одной из стен ^^

#video: SM LiveAction - 27

09:05

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2775-21-15
#original-date: 1.03.2008 Sat
#original-time: 9:15 PM
#original-day:  2775
#original-host: WinXP Prof SP2 (Build 2600)

- Таинственный серебряный кристал находится в теле принцессы. Что мы можем сделать?

А что тут делать? Только разве что пила поможет ^^ А у Нефрита, кстати, неплохая циркулярка была ^_~

Кстати, я ошибаюсь или Нефрит действительно (исключая Зойсайта) единственный, кто не пытался подгадить остальным?

#video: SM LiveAction - 27

09:05

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2775-20-48
#original-date: 1.03.2008 Sat
#original-time: 8:48 PM
#original-day:  2775
#original-host: WinXP Prof SP2 (Build 2600)

Дожили ^^ Слушаю Initial D Second Stage Non-stop Selection и отдельным потоком угадываю машины по звуку двигателя ^^ Любопытно, что очень характерный звук FD Кейске ни разу я не услышала.

Кстати, у меня возникла гениальная идея. Global Hot Keys у меня запускает всё на том же рабочем столе, на котором сам запущен. Я сидела, писала красивый код, который создаёт нить, потом переключает её на другой рабочий стол, потом делает ShellExecute(), и процесс должен стартовать на рабочем столе нити.

Щас! Не работает, и всё, хоть тресни. MessageBox() нормально, а это - нет. Я понимаю, что User32 функции и Kernel32 функции - не есть одно и тоже... Но... Я начала копать. В раздере про десктопы ни чего, в справке по ShellExecute() - тоже. Добралась до CreatePricess(), ведь она в конечном итоге стартует процесс. Вопрос был в том, от куда она узнаёт, на каком десктопе запускать. И я нашла... lpStartupInfo, lpDesktop:

Windows NT only: Points to a zero-terminated string that specifies either the name of the desktop only or the name of both the window station and desktop for this process. A backslash in the string pointed to by lpDesktop indicates that the string includes both desktop and window station names. Otherwise, the lpDesktop string is interpreted as a desktop name. If lpDesktop is NULL, the new process inherits the window station and desktop of its parent process.

Сие означает, что есть три десктопа. Десктоп ввода, тоесть выбранны, десктоп процесса, на котором запусается новый процесс, если не указывается конкретный десктоп в вышеуказанном параметре, и десктоп нити, на котором нить создаёт окна (это для сервисов нужно). Короче, мой алгоритм провалился...

Сейчас думаю сделать гадость в виде отдельного stub'а, который будет стартовать процесс, а Global Hot Keys запустит его на нужном десктопе (текущем). Хммм... Интересно, как лучше сделать обмен данными? Через файловую проекцию или через трубу? А то передавать данные новому процессу через INI - это несовременно...

Хотя... "Лучше по-простому, чем по-умному" ^^ Пишем INI в темпе (чтобы не орала Виста), передаём его как параметр, а потом ждём его завершения. Ну и результат вытаскиваем из того же INI ^^

Но файловую проекцию я всё равно попробую... Наверное ^^ Если не обленюсь ^^

#music: Initial D\Initial D Second Stage Non Stop Selection\Wain L / Goodbye Yellow Brick Road

09:05

Тотальная неудачница и убийца жёстких дисков.
#post-id: 2775-21-12
#original-date: 1.03.2008 Sat
#original-time: 9:12 PM
#original-day:  2775
#original-host: WinXP Prof SP2 (Build 2600)

Мммм... Что бы там Мэг ни говорила, а тёмная Меркури такая сугойная ^_^ Особенно когда не улыбается ^_^

#video: SM LiveAction - 27